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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 04.08.2011, 09:45
goodguy вне форума Посмотреть профиль Найти все сообщения от goodguy
  № 1  
Ответить с цитированием
goodguy
Banned
[+1 05.11.11]
[+1 09.08.11]

Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
Question Состоятельность конструкции if (stage) initialize();

Почти всегда использую конструкцию:
Код AS3:
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
 
private function init(e:Event = null):void {
 
}
Да, собственно и флешдевелоп ее создает по умолчанию для АС3 проектов.
И вот задался вопросом, а в чем вообще смысл верхней строки в данном случае?
Ведь очевидно же, что сразу после создания экземпляря stage всегда = null.
Или все-таки бывают те редкие случаи, когда "if" блок может сработать?


Последний раз редактировалось goodguy; 04.08.2011 в 09:48.
Старый 04.08.2011, 09:53
-De- вне форума Посмотреть профиль Отправить личное сообщение для -De- Найти все сообщения от -De-
  № 2  
Ответить с цитированием
-De-
 
Аватар для -De-

блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
Отправить сообщение для -De- с помощью ICQ Отправить сообщение для -De- с помощью Skype™
Если флэшка не подгружена в другую - сработает.
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают.

Старый 04.08.2011, 09:57
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 3  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Если флешка загружается, то у нее не будет stage, даже если лоадер добавлен в него. Если флешка stage owner (самая первая исполняемая FP), stage будет присутствовать, но все равно для нее будет диспатчиться ADDED_TO_STAGE. Я отказался от условия и использую только одну строку.

Код AS3:
addEventListener(Event.ADDED_TO_STAGE, init);
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 04.08.2011, 10:12
goodguy вне форума Посмотреть профиль Найти все сообщения от goodguy
  № 4  
Ответить с цитированием
goodguy
Banned
[+1 05.11.11]
[+1 09.08.11]

Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
Цитата:
Если флешка stage owner (самая первая исполняемая FP)
Точно. Только сейчас заметил

Цитата:
Если флэшка не подгружена в другую - сработает.
Не сработает, я проверял. Сработает событие. Или имеется в виду то же, о чем сказал dimarik?

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

Регистрация: Nov 2010
Адрес: Москва
Сообщений: 915
Записей в блоге: 4
Отправить сообщение для Aquahawk с помощью ICQ Отправить сообщение для Aquahawk с помощью Skype™
На самом деле, даже если stage есть у документ класса когда он стартует отдельно, событие addedToStage будет задиспатчено чуть позже. Т.е. по идее можно писать только addEventListener, но не стоит так делать ибо идеологически это косяк. Вообще присутствие стейджа в конструкторе док класса - бага эдоб, его там быть не должно. Но видимо они посчитали что для новичков так будет проще. Чем добавили несказанное количество геморроя желающим подгрузить внутрь себя отображаемые флешки динамически.

Старый 04.08.2011, 16:50
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 6  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Aquahawk, я ничего не понял.

С одной стороны говорите, что наличие stage в конструкторе -- это баг. С другой, что инициализация по addedToStage -- это идеологический косяк. Как же нам сделать правильно?
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 04.08.2011, 17:14
Aquahawk вне форума Посмотреть профиль Отправить личное сообщение для Aquahawk Посетить домашнюю страницу Aquahawk Найти все сообщения от Aquahawk
  № 7  
Ответить с цитированием
Aquahawk
 
Аватар для Aquahawk

Регистрация: Nov 2010
Адрес: Москва
Сообщений: 915
Записей в блоге: 4
Отправить сообщение для Aquahawk с помощью ICQ Отправить сообщение для Aquahawk с помощью Skype™
В том смысле что писать просто
Код AS3:
addEventListener(Event.ADDED_TO_STAGE, init);
без проверки на существование стейджа можно и это будет работать, даже несмотря на то что, в связи с багом(фичей если удобнее), стейдж есть в конструкторе док класса. Но так делать не надо, всегда надо писать констрккцию с ифом.

Старый 04.08.2011, 17:29
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 8  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Цитата:
Но так делать не надо, всегда надо писать констрккцию с ифом.
Почему так делать не надо?

Я сделал прямо противоположный вывод по двум причинам.
1) Если наличие stage в конструкторе -- это баг, значит его могут поправить и if точно не нужен.
2) Каждый DO генерирует событие ADDED_TO_STAGE, значит if не нужен.
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 04.08.2011, 17:32
goodguy вне форума Посмотреть профиль Найти все сообщения от goodguy
  № 9  
Ответить с цитированием
goodguy
Banned
[+1 05.11.11]
[+1 09.08.11]

Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
Цитата:
Но так делать не надо, всегда надо писать констрккцию с ифом.
А по-моему не стоит так писать, это захламляет код. Раз работает просто addedToStage, то для меня лично этот вариант предпочтительнее. Тут я полностью соглавен с Димариком.
Идеологии бывают разные. Кто-то считает что надо использовать this, кто-то выравнивает все типы переменных табуляцией и т.п. Это не говорит о том, что какой-то вариант правильный, а какой-то нет.

Старый 04.08.2011, 17:57
Aquahawk вне форума Посмотреть профиль Отправить личное сообщение для Aquahawk Посетить домашнюю страницу Aquahawk Найти все сообщения от Aquahawk
  № 10  
Ответить с цитированием
Aquahawk
 
Аватар для Aquahawk

Регистрация: Nov 2010
Адрес: Москва
Сообщений: 915
Записей в блоге: 4
Отправить сообщение для Aquahawk с помощью ICQ Отправить сообщение для Aquahawk с помощью Skype™
Эдоб решила что даст ссылку на stage для документ класса в конструкторе. На самом деле stage доступен в конструкторе ещё у объектов которые положены в ide кадр и им присвоен класс, у них тоже stage есть в конструкторе, тем не менее событие addedtostage отправляется уже после того как stage доступен. Более того если такую флешку динамически подгрузить то в ней stage не будет в конструкторах объектов лежащих на первом кадре и у документ класса. Всё это смахивает на костыльность. Просто при создании самой средой(объекты на кадрах и док класс) происходит немного магии, а именно дисплейобджект конструируется раньше чем ваш конструктор, потом этот дисплейобджект добавляется на сцену, и только потом уже запускается ваш конструктор. Это можно пронаблюдать если сделать в ide дисплейобджект а в конструкторе написать такой код
Код AS3:
if (2+2!=4){super();}
и вы увидите что конструктор предка не вызовется(можно проверить цепочкой двойным наследованием) а дисплейобджект будет вполне функционален.

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

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

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


 


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


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