Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Вопросы по stage (http://www.flasher.ru/forum/showthread.php?t=160336)

Bgg 12.07.2011 12:36

Цитата:

Сообщение от RaVeN-Nikma (Сообщение 1010892)
Риторическое отступление:
На что можно изменить public static STAGE:Stage, кроме как на Stage или null, да и зачем его вообще менять, даже работая в команде. Вы же не работаете в кругу врагов, которые так и мечтают из своего класса в main.as в STAGE поставить null, чтобы все сломать )))

У Stage есть свойства которые можно изменять. Stage полон событий, на которые можно подписаться и забыть отписаться.

Статичный Stage это лень. Из-за него появляется сильное связывание, и классы становятся привязанными к своему месту. Мелкое обновление архитектуры повлечет за собой перетаскивание статичных ссылок.

Цитата:

У меня статическая ссылка на сцену используется для добавления разных окошек с предупреждениями, которые сами добавляются поверх всего остального, и сами же полностью удаляются при нажатии кнопки подтверждения.
А ещё удобнее сделать контроллер окон, который бы ловил всплывающие события от окон и решал закрывать окно или нет.

RaVeN-Nikma 12.07.2011 12:42

Вечная тема. Если много вложенных классов, то каждому кому нужен Stage давать ссылку, мне лично не удобно, тянешь ее за собой. Одному классу ссылка не нужна, зато его детям нужна, и все равно передаешь ему ссылку. Не удобно, и определенно не проще потом заменять куски, если придется.

Цитата:

Статичный Stage это лень. Из-за него появляется сильное связывание, и классы становятся привязанными к своему месту. Мелкое обновление архитектуры повлечет за собой перетаскивание статичных ссылок.
Добавил статичный Stage в main и теперь меняй архитектуру как хочешь, 100 или 1000 классов, ссылка всегда будет одна, и ничего не полетит.

Цитата:

У Stage есть свойства которые можно изменять. Stage полон событий, на которые можно подписаться и забыть отписаться.
ответ очевиден, не забудь отписаться, это уже обсудили выше. Если криво сделать, то и без статичной ссылки проблемы будут

etc 12.07.2011 12:44

Цитата:

Сообщение от RaVeN-Nikma (Сообщение 1010903)
Вечная тема. Если много вложенных классов, то каждому кому нужен Stage давать ссылку, мне лично не удобно, тянешь ее за собой. Одному классу ссылка не нужна, зато его детям нужна, и все равно передаешь ему ссылку. Не удобно, и определенно не проще потом заменять куски, если придется.

У DisplayObject-ов ссылка и так появляется после добавления в display list.

RaVeN-Nikma 12.07.2011 12:52

Ваше мнение насчет, того что не DisplayObjects вообще не должны ничего слушать, я прочитал выше

goodguy 12.07.2011 12:52

Цитата:

А ещё удобнее сделать контроллер окон, который бы ловил всплывающие события от окон и решал закрывать окно или нет.
Нет. Мой вариант удобнее этого. Чтобы он ловил события от окон, нужно его еще подписать на эти события. В моем же случае окошко с предупреждением добавляется из любого места через статический метод WarningWindow.showWarning(text:String);
Цитата:

Статичный Stage это лень. Из-за него появляется сильное связывание, и классы становятся привязанными к своему месту. Мелкое обновление архитектуры повлечет за собой перетаскивание статичных ссылок.
Поэтому, класс в который записывается статическая ссылка нужно хранить в корневой директории проекта, и можно будет менять архитектуру как угодно

Цитата:

У DisplayObject-ов ссылка и так появляется после добавления в display list.
Бывают случаи, когда ссылка нужна еще до добавления

etc 12.07.2011 12:57

Цитата:

Сообщение от RaVeN-Nikma (Сообщение 1010905)
Ваше мнение насчет, того что не DisplayObjects вообще не должны ничего слушать, я прочитал выше

Я этого не говорил. Вы меня невнимательно прочитали.

Добавлено через 30 секунд
Цитата:

Сообщение от goodguy (Сообщение 1010906)
Бывают случаи, когда ссылка нужна еще до добавления

Пример, пожалуйста.

RaVeN-Nikma 12.07.2011 12:59

Цитата:

нельзя, потому что не находящиеся в display list объекты вообще не должны ничего делать
Верно, эти слова расценил так

goodguy 12.07.2011 13:02

Пример: контроллер клавиатуры, который сам по себе не является дисплей объектом и, соответственно, вообще не добавляется на сцену. Но подписать слушатель к сцене из него нужно. Соответственно, нужно либо передавать ему ссылку в конструкторе, либо использовать статическую (ну или передавать через сеттер, не важно)
Так же, используя статическую ссылку можно отписать сцену от какого либо события даже в объекте, который уже удален из всех контейнеров. Это быдлокодерство, не буду отрицать, но у меня есть код, который большую часть времени отписыват сцену от событий нормально, но время от времени почему-то выдает null reference. Решил статической ссылкой, ибо перелопачивать всю эту гору кода в лом

etc 12.07.2011 13:02

Цитата:

Сообщение от RaVeN-Nikma (Сообщение 1010910)
Верно, эти слова расценил так

Я не это имел ввиду. Я имел ввиду, что DisplayObject, если он отсутствует на сцене, потенциально или только создан и ещё только будет инициализироваться, либо уже удалён и отписан от всего. События от Stage в эти моменты ему не нужны совершенно.
Про клавиатурные менеджеры я уже описывал выше, ссылка на Stage передаётся в конструкторе.

goodguy, с контроллером клавиатуры понятно, только единственный адекватный вариант — передать ему ссылку для работы снаружи. Что касается отписки, то до REMOVED_FROM_STAGE можно держать ссылку у себя любимого, затем при возникновении события отписаться и удалить ссылку. Опять же, я об этом писал пару постов назад.

И да, как уже говорил Bgg, это всё лень и подтверждения этому:

Цитата:

Сообщение от goodguy (Сообщение 1010911)
в лом

Цитата:

Сообщение от RaVeN-Nikma (Сообщение 1010903)
мне лично не удобно


goodguy 12.07.2011 13:05

И тем не менее. Серьезных аргументов против использования статической ссылки на сцену я не вижу.
Похоже это просто дело личных предпочтений


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

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