![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Jan 2013
Адрес: Москва, Сходня
Сообщений: 41
|
Ну, добавлять на сцену я буду все в главном классе, как положено.
Но к примеру у меня есть класс VK - синглтон, где используется конструкция stage.loaderInfo.parameters, в этот класс я передаю ссылку на Main, думал сделать так чтобы не передавать ссылку, а обращаться просто: main.stage.loaderInfo.parameters - но понял теперь что это нарушает ООП принципы, кароче самое правильное ссылкой как я понял. Добавлено через 1 минуту Имеется ввиду, если написать так в главном классе вместо просто addChild()? Добавлено через 3 минуты Цитата:
|
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Цитата:
Сама по себе запись stage.addChild() является командой от потомка родителю, что так же недопустимо. Потомок не должен вызывать методы родителя напрямую. Если родитель желает слышать голос ребенка, он подписывается на события от него и сам решает, что делать когда события приходят. Но ребенок никогда не должен принимать решения за родителя и делать что-то "от его имени". Приложение без иерархии превращается в бардак, а классы, желающие управлять своими родителями, непригодны для повторного использования в других проектах. Классы, выбрасывающие своих детей на Stage — тем более. Многие используют этот трюк для добавления всплывающих окон и подсказок (а когда-то и курсоров), вместо того чтобы просто создать структуру глубины с помощью контейнеров-"слоев" в документ-классе. Это не более чем безалаберность и лень. Не делайте так. Не понимайте слова "добавить на стейдж" буквально. Это всегда подразумевает "добавить в список отображения". Stage — это плеер. И в плеере должен показываться только один объект — Ваше приложение. И все его дети должны находиться в ЕГО списке отображения.
__________________
Reality.getBounds(this); |
|
|||||
|
Регистрация: Jan 2013
Адрес: Москва, Сходня
Сообщений: 41
|
Огромное спасибо, Wolsh! Теперь все понятно!
|
|
|||||
|
на самом деле, дела с этим обстоят очень плохо, огромное кол-во программистов использует этот подход в промышленных масштабах... а потом, долго-долго решают проблемы... другая доля программистов не понимает, что Stage один.
Открываешь проект и видишь StageHelper.instance.activeStage, что-то-там.removeFromParent() и т.д.,.. я до сих пор не могу понять, почему\зачем люди так хотят создать себе проблем.
__________________
местонахождение |
|
|||||
|
Регистрация: Mar 2010
Сообщений: 137
|
Цитата:
Цитата:
|
|
|||||
|
какого фига main кому в "дереве" своей программы должен быть доступен? или должен отдавать свое? ну правда, а?
если так, любой сможет расшатать логику программы.. отловить это будет крайне сложно(
__________________
местонахождение |
|
|||||
|
Регистрация: Jan 2013
Адрес: Москва, Сходня
Сообщений: 41
|
что ты имеешь ввиду под "отдавать свое"? то, что он передает ссылку на самого себя или что-то другое?
|
|
|||||
|
Цитата:
![]() Да, действительно, так делать правильно в ряде случаев. Но главная мысль в любом приложении с отделенными частями логики – пусть данные не лезут в отображение напрямую. К слову, интересен обмен опытом: чем для тебя фатальны статические ссылки? По сабжу: запомните раз и навсегда. Синглтон – это только возможность создания одного экземпляра. В контексте флеша stage – это синглтон. Но к нему нету повсеместно глобального доступа. Сколько раз создается Main (подразумеваю, что Main - base class). Один. Этот экземпляр создаёт флешплеер при запуске флешки. Если требуется вызвать где–то явно – то это действительно плохо. Ну серьезно, приложение которое создаёт само себя внутри себя... Так что мой ответ: да, делать базовый класс синглтоном – правильно. Но он настолько очевидно-синглтон, что можно не тратить времени на реализации заглушек, чтобы второй раз его не создали. И нет, синглтон и глобальный доступ – это рядом стоящее, но совсем не одно и то же.
__________________
Тут мужик танцует и поёт про флэш |
|
|||||
|
Цитата:
У меня часто в приложениях присутствуют менеджеры модальных окон, которые инициализируются на stage. При вызове какого-то статического метода, типа addWarningWindow(title:String) на стейдж добавляется окно, а на фон сразу под ним добавляется спрайт с прозрачной заливкой со сторонаями равными stageWidth, stageHeight, чтобы перекрыть клики. Окна полностью автономны, и приложение не имеет каких либо других ссылок на них. Так вот, почему stage а не документ класс, опять же из-за размеров спрайта заливки. Не от документ класса же получать ширину и высоту этой заливки. |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Поверх всего лежит контейнер для модальных окон. Менеджер имеет ссылку на него, а контейнер, естественно, имеет ссылку на стейдж и знает его размеры. В чем же проблема?
Экран затемнения уж тем более так просто написать отдельным классом, который достаточно кинуть в список отображения и он, автоматически получив ссылку на стейдж, закрасит нужную область. Другое дело с центрированием модальных окон — некрасиво, когда ребенок сам задает свои координаты в родителе. Но тут уж, как говорится, смотри п.1. Контейнер для размещения окна знает стейдж и его размеры. Если я проглядел/не понял проблему, объясните на пальцах.
__________________
Reality.getBounds(this); |
![]() |
![]() |
Часовой пояс GMT +4, время: 14:42. |
|
|
« Предыдущая тема | Следующая тема » |
|
|