Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 10.10.2012, 23:45
inpost вне форума Посмотреть профиль Отправить личное сообщение для inpost Найти все сообщения от inpost
  № 1  
Ответить с цитированием
inpost

Регистрация: Oct 2012
Сообщений: 23
По умолчанию isset и addChild. Существует ли и как проверить.

Всем привет. Новичок в флеше, спасибо за понимание.
Я создаю объект:
Код AS3:
var ns_playback:NetStream;
ns_playback = new NetStream(NCs);
ns_playback.play(userInfo.enemy_sex + userInfo.enemy_id);
video_playback = new Video(420, 336);
video_playback.attachNetStream(ns_playback);
Далее по нажатию на кнопку я его добавляю через addChild:
Код AS3:
addChild(video_playback);
Теперь по другому событию я хочу проверить, добавлен ли он на экран, чтобы его убрать. Если пишу просто removeChild - выдаёт ошибка в случае, если не было ранее addChild.
Проверка на if(video_playback) - будет проверять, создан ли объект, а он у меня всегда создан, мне лишь надо показывать или скрывать данный блок по событию.
Может можно как-то давать имя, чтобы потом делать уже проверку по имени?

Старый 11.10.2012, 00:18
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 2  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Обычно делают так
Код AS3:
if(this.contains(video_playback)) this.removeChild(video_playback);
или
Код AS3:
if(video_playback.parent == this) this.removeChild(video_playback);
__________________
Reality.getBounds(this);

Старый 11.10.2012, 02:02
inpost вне форума Посмотреть профиль Отправить личное сообщение для inpost Найти все сообщения от inpost
  № 3  
Ответить с цитированием
inpost

Регистрация: Oct 2012
Сообщений: 23
Что-то я делаю не так, видимо. Вот код:

Код AS3:
var loader:Loader;
 
function AddPhoto() {
	//if(loader) {loader = null;}
 
	if(this.contains(loader)) this.removeChild(loader); // Не работает.
 
	loader = new Loader();
	loader.load(new URLRequest("/photo/full/picture.jpg"));
	loader.contentLoaderInfo.addEventListener(Event.COMPLETE, cc);
}
 
function cc(e:Event) 
{
	var n_width = 460;
	var n_height = 360;
 
	if(loader.height > n_height) {
		loader.height = n_height;
		loader.scaleX = loader.scaleY;
	}
	if(loader.width > n_width) {
		loader.width = n_width;
		loader.scaleY = loader.scaleX;
	}
	loader.x = (stage.stageWidth - loader.width) / 2;
	addChild(loader);
}
Может вместо this использовать stage ? К примеру stage.addChild(loader); И проверку через stage.contains(loader) ? Но это лишь мысли, как верно?

Старый 11.10.2012, 05:35
Isfet вне форума Посмотреть профиль Отправить личное сообщение для Isfet Найти все сообщения от Isfet
  № 4  
Ответить с цитированием
Isfet

Регистрация: Mar 2012
Адрес: г.Новосибирск
Сообщений: 381
вы пишите в кадре, и у вас this и stage указывают на stage. По этому можно и так и так.

Старый 11.10.2012, 07:01
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 5  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
вы пишите в кадре, и у вас this и stage указывают на stage. По этому можно и так и так.
this указывает на документ класс, а не на стейдж

Старый 11.10.2012, 11:03
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 6  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
1.
Цитата:
// Не работает.
В чем проявляется? Выдает ошибку как и раньше?
2.
Цитата:
loader.load(new URLRequest("/photo/full/picture.jpg"));
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, cc);
Откуда пришла эта мода — подписываться на событие ПОСЛЕ того, как инициировал действие, приводящее к этому событию?
3.
Цитата:
проверять, создан ли объект, а он у меня всегда создан, мне лишь надо показывать или скрывать данный блок по событию.
Зачем тогда Вы каждый раз создаете новый Лоадер:
Цитата:
loader = new Loader();
?
4.
Цитата:
К примеру stage.addChild(loader);
Забудьте навсегда, что где-то видели выражение stage.addChild(). Никогда и ничего не добавляйте на стейдж, он — для экземпляра ДокументКласса, и только.
__________________
Reality.getBounds(this);

Старый 11.10.2012, 11:08
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 7  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
Откуда пришла эта мода — подписываться на событие ПОСЛЕ того, как инициировал действие, приводящее к этому событию?
Мне кажется это пока просто не осозние того, что конкретно происходит в коде. Я когда только начинал писать на ас3 (да и вообще начинал программировать), тоже не понимал и делал часто так же )

Старый 11.10.2012, 13:20
PainKiller вне форума Посмотреть профиль Отправить личное сообщение для PainKiller Найти все сообщения от PainKiller
  № 8  
Ответить с цитированием
PainKiller
 
Аватар для PainKiller

блогер
Регистрация: Sep 2011
Адрес: Москва
Сообщений: 533
Записей в блоге: 4
Цитата:
Забудьте навсегда, что где-то видели выражение stage.addChild(). Никогда и ничего не добавляйте на стейдж, он — для экземпляра ДокументКласса, и только.
извиняюсь за оффтопик, но просто заинтересовало, почему нельзя так делать stage.addChild()? Я иногда добавляю дисплейобжекты сразу на сцену, когда надо, чтобы они гарантированно были сверху, вроде проблем с этим не испытывал.

Старый 11.10.2012, 14:19
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 9  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Потому что стейдж не является частью Вашего приложения. Это родительский контейнер, управлять которым из детей, по понятиям ООП — не комильфо (настройки не в счет). Иерархически приложением является Документ-класс. Для того он и ОБЯЗАН быть наследником контейнера, чтобы все дети содержались в нем и не гуляли где ни попадя. Стейдж же представляет флэшплеер, проигрывающий Ваше приложение (Документ-класс). Не надо одновременно проигрывать в нем что-то еще.
Цитата:
чтобы они гарантированно были сверху
Гарантийный срок истечет, как только Вы загрузите внешнюю флэшку собрата по мыслям, которая нашпигует стейдж своими детишками. Аккурат поверх Ваших.
Всего-то и нужно — создать структуру "слоев"-контейнеров заранее, и не нарушать ее, добавляя детей в контейнеры, предназначенные именно для них, и сохраняющие нужную глубину постоянно, как слои в IDE.
__________________
Reality.getBounds(this);

Старый 11.10.2012, 14:26
PainKiller вне форума Посмотреть профиль Отправить личное сообщение для PainKiller Найти все сообщения от PainKiller
  № 10  
Ответить с цитированием
PainKiller
 
Аватар для PainKiller

блогер
Регистрация: Sep 2011
Адрес: Москва
Сообщений: 533
Записей в блоге: 4
Wolsh мнение понятно, спасибо что уделили внимание

Создать новую тему Ответ Часовой пояс GMT +4, время: 08:27.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 08:27.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.