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

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

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

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,918
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
По умолчанию Задержка событий.

Сначала я инициализирую класс опций, который инициализирует все свои поля по ADDED_TO_STAGE
Код AS3:
_options = Options.getInstance();
addChild(_options); //required for initializing sliders
removeChild(_options);
Здесь, в теории, должно было сработать событие ADDED_TO_STAGE, и выполнение перейти в метод init Options, но
Код AS3:
trace(_options.stones);
чуть ниже возвращает null.

Выходит, это происходит с задержкой?
Как же тогда поймать момент, когда init проинициализирован?
Далее в конце init отсылаю событие
Код AS3:
dispatchEvent(new Event(Event.ACTIVATE));
Пытаюсь проверить, работает ли таким способом, и, угадайте что?
Код AS3:
_options = Options.getInstance();
addChild(_options); //required for initializing sliders
removeChild(_options);
 
_options.addEventListener(Event.ACTIVATE, function(e:Event):void{
	trace(_options.stones);
});
null. Отсылается событие раньше времени, шта?

Что я делаю не так?

update:

Убрал removeChild в обработчик события, и заработало...
Тоесть, событие ADDED_TO_STAGE, оказывается, вызывается не addChild напрямую, и происходит где-то через кадр?(Потому, что ENTER_FRAME успевает сработать разок)

Как это вообще по нормальному то делается? У меня есть класс Options, дисплейный, по иниту инициализирует свои поля, но в конструкторе инициализировать нельзя потому, что он унаследован от Window, который рисует задний фон в своём ините, и выходит, что тогда элементы будут под задним фоном. Если переместить рисование фона в конструктор, то получается, что изменить параметры windowWidth и windowHeight невозможно, пробовл без super.windowWidth, не работает, с super пишет, что до вызова конструктора суперкласса this, super и всё такое запрещено. А фон нужно рисовать по размерам окна(логично).
Оверрайда переменных не существует, что делать?

Нужно проинициализировать Options и сразу же пользоваться его полями.
__________________
There is no thing in this world that is not simple.


Последний раз редактировалось ZackMercury; 23.08.2017 в 23:29.
Старый 24.08.2017, 10:46
Tails вне форума Посмотреть профиль Отправить личное сообщение для Tails Найти все сообщения от Tails
  № 2  
Ответить с цитированием
Tails
 
Аватар для Tails

блогер
Регистрация: Dec 2008
Адрес: г. Чебоксары
Сообщений: 2,259
Записей в блоге: 6
Я обычно заводил отдельный публичный метод init() и свойство isInit, указывающее был ли экземпляр уже проинициализирован.
__________________
Дети не должны знать о своих родителях

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

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,918
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
А почему событие, которое я диспатчу в методе init после всего кода вызывает обработчик тогда, когда ничего не проинициализировано? Чушь какая-то.
Почему перенос removeChild в обработчик этого события помог?
__________________
There is no thing in this world that is not simple.

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

блогер
Регистрация: Dec 2008
Адрес: г. Чебоксары
Сообщений: 2,259
Записей в блоге: 6
Можешь изолировать проблему и выложить? А то трудно во всё это вникнуть. Ещё событие: flash.events.Event.ACTIVATE нельзя использовать в своей логике так как оно является широковещательным и зарезервировано для других целей.
И на всякий случай уточню, речь идёт о нативном дисплей листе и диспетчере? Лучше выложить проблемный код целиком.
__________________
Дети не должны знать о своих родителях

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

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,918
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
Действительно, поменял ACTIVATE на кастомное, и перестало вообще вызываться) Я и не подумал бы, что оно задействовано в спрайте.
Вообще, я думал, что событие вызывается сразу при вызове addChild, а так приходится лепить ещё доп. события к уже существующим.
Вызов инита руками как-то неприятно ощущается. Но всё же решение, спасибо.
__________________
There is no thing in this world that is not simple.

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

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

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


 


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


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