![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Banned
[+1 05.11.11]
[+1 09.08.11] Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
|
Почти всегда использую конструкцию:
if (stage) init(); else addEventListener(Event.ADDED_TO_STAGE, init); private function init(e:Event = null):void { } И вот задался вопросом, а в чем вообще смысл верхней строки в данном случае? Ведь очевидно же, что сразу после создания экземпляря stage всегда = null. Или все-таки бывают те редкие случаи, когда "if" блок может сработать? Последний раз редактировалось goodguy; 04.08.2011 в 09:48. |
|
|||||
|
.
|
Если флешка загружается, то у нее не будет stage, даже если лоадер добавлен в него. Если флешка stage owner (самая первая исполняемая FP), stage будет присутствовать, но все равно для нее будет диспатчиться ADDED_TO_STAGE. Я отказался от условия и использую только одну строку.
|
|
|||||
|
Banned
[+1 05.11.11]
[+1 09.08.11] Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
|
Цитата:
Цитата:
|
|
|||||
|
На самом деле, даже если stage есть у документ класса когда он стартует отдельно, событие addedToStage будет задиспатчено чуть позже. Т.е. по идее можно писать только addEventListener, но не стоит так делать ибо идеологически это косяк. Вообще присутствие стейджа в конструкторе док класса - бага эдоб, его там быть не должно. Но видимо они посчитали что для новичков так будет проще. Чем добавили несказанное количество геморроя желающим подгрузить внутрь себя отображаемые флешки динамически.
|
|
|||||
|
.
|
Aquahawk, я ничего не понял.
С одной стороны говорите, что наличие stage в конструкторе -- это баг. С другой, что инициализация по addedToStage -- это идеологический косяк. Как же нам сделать правильно? |
|
|||||
|
В том смысле что писать просто
без проверки на существование стейджа можно и это будет работать, даже несмотря на то что, в связи с багом(фичей если удобнее), стейдж есть в конструкторе док класса. Но так делать не надо, всегда надо писать констрккцию с ифом.
|
|
|||||
|
.
|
Цитата:
Я сделал прямо противоположный вывод по двум причинам. 1) Если наличие stage в конструкторе -- это баг, значит его могут поправить и if точно не нужен. 2) Каждый DO генерирует событие ADDED_TO_STAGE, значит if не нужен. |
|
|||||
|
Banned
[+1 05.11.11]
[+1 09.08.11] Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
|
Цитата:
Идеологии бывают разные. Кто-то считает что надо использовать this, кто-то выравнивает все типы переменных табуляцией и т.п. Это не говорит о том, что какой-то вариант правильный, а какой-то нет. |
|
|||||
|
Эдоб решила что даст ссылку на stage для документ класса в конструкторе. На самом деле stage доступен в конструкторе ещё у объектов которые положены в ide кадр и им присвоен класс, у них тоже stage есть в конструкторе, тем не менее событие addedtostage отправляется уже после того как stage доступен. Более того если такую флешку динамически подгрузить то в ней stage не будет в конструкторах объектов лежащих на первом кадре и у документ класса. Всё это смахивает на костыльность. Просто при создании самой средой(объекты на кадрах и док класс) происходит немного магии, а именно дисплейобджект конструируется раньше чем ваш конструктор, потом этот дисплейобджект добавляется на сцену, и только потом уже запускается ваш конструктор. Это можно пронаблюдать если сделать в ide дисплейобджект а в конструкторе написать такой код
и вы увидите что конструктор предка не вызовется(можно проверить цепочкой двойным наследованием) а дисплейобджект будет вполне функционален.
|
![]() |
![]() |
Часовой пояс GMT +4, время: 17:49. |
|
|
« Предыдущая тема | Следующая тема » |
|
|