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

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

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

Регистрация: Jun 2014
Сообщений: 558
По умолчанию Снова stage, снова не понимаю

Добрый день, хелп, в очередной раз туплю
в классе main пишу
Код AS3:
			var createSpace:CreateSpace = new CreateSpace();
			addChild( createSpace);
соответственно объект добавиться на сцену, ссылка на stage у него будет, НО
ведь сначала ведь происходит создание нового объекта, а лишь потом добавление на сцену, а так как внутри класса есть слушатели события клавиатуры, пишу в конструкторе класса
Код AS3:
stage.addEventListener(KeyboardEvent.KEY_DOWN, setKeyPressed);
а тут и борода, stage = null, так как произошла только инициализация, но не добавление на сцену
ок, значит пишет в конструкторе перед добавление слушателя
Код AS3:
addEventListener(Event.ADDED_TO_STAGE, init);
итог - та же борода, stage = null

получается тогда два варианта, либо в конструктор передавать ссылку на stage или создать public function, которую вызывать после добавление класса на сцену и в ней объявлять слушателей сцены?

п.с. мне вообще данный класс не нужно добавлять на сцену, нужно добавлять классы, которые в нём создаются и добавляются на сцену, но сути вопроса не меняет, т.к если его не добавить на сцену, он не получит ссылку на stage
п.п.с. что интересно, в этом классе, если создавать другие классы на этапе вызова конструктора, то stage.addChild() не работает, т.к. stage = null, а this работает, но выходит, что this становится ссылкой на сцену, после addChild(createSpace).

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

блогер
Регистрация: Dec 2008
Адрес: г. Чебоксары
Сообщений: 2,259
Записей в блоге: 6
Код AS3:
function Main(){
    if(stage){
        init();
    }else{
        addEventListener(Event.ADDED_TO_STAGE, init);
    }
}
function init(e:Event = null):void{
    removeEventListener(Event.ADDED_TO_STAGE, init);
    trace(stage);
}
__________________
Дети не должны знать о своих родителях

Старый 15.06.2015, 17:24
ZackMercury вне форума Посмотреть профиль Отправить личное сообщение для ZackMercury Найти все сообщения от ZackMercury
  № 3  
Ответить с цитированием
ZackMercury
 
Аватар для ZackMercury

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,921
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
Чушь.
stage.addChild и this.addChild - это разные вещи.
stage.addChild - это добавление дитя в DisplayList объекта stage.
this.addChild - это добавления дитя в DisplayList текущего объекта.

Если вы сравните потом

Код AS3:
var childrenOfStage:Array = [];
for(var i:int = 0; i < stage.numChildren; i++)
{
   childrenOfStage.push(stage.getChildAt(i));
}
 
var childrenOfThis:Array = [];
for(var j:int = 0; j < numChildren; j++)
{
   childrenOfThis.push(getChildAt(j));
}
trace(childrenOfStage);
trace(childrenOfThis);
__________________
There is no thing in this world that is not simple.

Старый 15.06.2015, 17:41
neonoviiwolf вне форума Посмотреть профиль Отправить личное сообщение для neonoviiwolf Найти все сообщения от neonoviiwolf
  № 4  
Ответить с цитированием
neonoviiwolf

Регистрация: Jun 2014
Сообщений: 558
Tails в вашем варианте всё заработало, после того, как перенёс слушатели в function init(e:Event = null):void (до этого были в конструкторе), выходит ссылку на stage получают, только слушатели, которые вызываются в init? Я то думал, что весь класс получает в итоге, хотя всё и не работало))
ZackMercury я знаю, что разные вещи, наверно я неудачно выразился


Последний раз редактировалось neonoviiwolf; 15.06.2015 в 18:04.
Старый 15.06.2015, 17:57
Tails вне форума Посмотреть профиль Отправить личное сообщение для Tails Найти все сообщения от Tails
  № 5  
Ответить с цитированием
Tails
 
Аватар для Tails

блогер
Регистрация: Dec 2008
Адрес: г. Чебоксары
Сообщений: 2,259
Записей в блоге: 6
Поле stage принадлежит всему экземпляру класса. Просто в конструкторе оно ещё не задано.

Учтите, что ссылка на stage может быть снова утеряна, после события: Event.REMOVED_FROM_STAGE.
__________________
Дети не должны знать о своих родителях

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

блогер
Регистрация: Mar 2008
Адрес: Днепропетровск
Сообщений: 1,783
Записей в блоге: 3
Цитата:
выходит ссылку на stage получают, только слушатели, которые вызываются в init?
Не совсем так. Ссылкой на stage можно пользоваться в любом методе класса (кроме конструктора), просто при условии, что stage уже доступна. А так как метод init срабатывает первым, так только ссылка на stage появляется, то в нём просто удобно сразу подписать на сцену всё что нужно.

Старый 15.06.2015, 18:05
neonoviiwolf вне форума Посмотреть профиль Отправить личное сообщение для neonoviiwolf Найти все сообщения от neonoviiwolf
  № 7  
Ответить с цитированием
neonoviiwolf

Регистрация: Jun 2014
Сообщений: 558
спасибо, а то через раз, от незнания, на грабли наступал
а кстати, почему пишут (e:Event = null) ? работает так же и без null

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

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,921
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
Если не указать значение по умолчанию, то нельзя будет вызвать вот так
Код AS3:
init();
А только так
Код AS3:
init(null);
или
Код AS3:
init(new Event(...));
__________________
There is no thing in this world that is not simple.

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

Регистрация: Sep 2008
Адрес: Черкассы
Сообщений: 1,167
Записей в блоге: 1
Отправить сообщение для AlexCooper с помощью ICQ Отправить сообщение для AlexCooper с помощью Skype™
Цитата:
Сообщение от neonoviiwolf Посмотреть сообщение
спасибо, а то через раз, от незнания, на грабли наступал
а кстати, почему пишут (e:Event = null) ? работает так же и без null
Потому как если сработает
Код AS3:
 if(stage){
        init();
вызываеться метод без параметров, и если оставить
Код AS3:
(e:Event)
у вас будет аргумент ошибка
__________________
return this...

Старый 15.06.2015, 18:09
neonoviiwolf вне форума Посмотреть профиль Отправить личное сообщение для neonoviiwolf Найти все сообщения от neonoviiwolf
  № 10  
Ответить с цитированием
neonoviiwolf

Регистрация: Jun 2014
Сообщений: 558
ок, понял

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

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

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


 


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


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