Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Как добавлять на сцену мувиклипы не из основного класса. (http://www.flasher.ru/forum/showthread.php?t=181278)

strangedk 22.06.2012 13:42

Цитата:

Сообщение от garymar (Сообщение 1085677)
Все равно мне кажется это спорный вопрос... Если приложение нуждается в доступе к stage, то нужно его в любом случае передавать. Я встречал много уроков толковых разработчиков где передавали stage в другие классы (Например при использовании box2D...)... Или например, как мне получить свойства stage из другого класса... В этом случае нужно передавать stage в другой класс... А иначе как?

Между прочим тот же самый Box2D прекрасно отображается в любом DisplayObject, и конкретно Stage ему совершенно не нужен.

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

Лично я при разработке например игры, всегда свожу к тому, что у меня есть только один главный визуальный объект, который добавлен на stage. Например это класс Game. Который уже в свою очередь содержит контейнера Status, Player, Controller, Map и прочие.

Я всегда могу сделать любые операции с моим визуальным объектом Game. Например добавить сверху рекламу, или какие-то другие элементы. Не затрагивая основной класс игры.

Добавлено через 4 минуты
Цитата:

Сообщение от a_[w] (Сообщение 1085385)
Верно, по большому счёту нет дела. Моя задача указать как пользоваться и что делать нельзя. Вероятность того, что он полезет на стейдж _значительно_ меньше, чем вероятность добавления детей в рут.

Забудьте слово root. У вас всегда должен быть главный контейнер приложения. И это не должен быть stage.
Неужто вам так тяжело всю программу просто обернуть еще в один класс?

Wolsh 22.06.2012 14:37

Цитата:

Никогда никому не передавайте ссылку на stage, если этого можно избежать.
Если класс сам не является дисплейным, при этом занимается управлением объектами, и ему нужен stage для прослушивания событий — Вам никуда не деться от ссылки.
Еще раз... Моя критика касалась советов использовать стейдж как контейнер для детей Приложения. Я пока еще в здравом уме и ни разу не говорил "навсегда забудьте про стейдж и ни в коем случае к нему не обращайтесь". Тем не менее, раздавать ссылки на стейдж надо только тогда, когда в этом действительно есть архитектурная необходимость, а не наоборот — раздавать ссылки на стейдж чтобы настроить костылей вместо правильной архитектуры.

strangedk 22.06.2012 14:41

Wolsh, но увы. Вас не слышат)

Wolsh 22.06.2012 15:08

Цитата:

Сообщение от garymar (Сообщение 1085677)
Wolsh, по сути вы предлагаете создать какой-то контейнер и работать полностью с ним? Я правильно понял?

Смотря о чем речь)))
Если вообще, то такой контейнер уже есть — рут, он же "экземпляр класса Документа" (к слову в AS3 понятие root вполне кошерное, в отличие от AS2, и не надо его бояться). Он добавляется на стейдж автоматически и в нем то и должно содержаться всё приложение. То есть я, напрмер, помещаю экземпляр Основного класса Приложения (скажем, Game) в этот контейнер (пример причины "зачем так" указал strangedk).
Если же речь о "слоях", как в случае с компонентами, то ДА, я бы делал контейнер для всей этой братии и позволил разработчику на свое усмотрение располагать этот контейнер и заботиться о его "всплывании", если в этом есть необходимость. По-моему, любой разработчик, создающий архитектуру "слоистого" приложения вполне отдает себе отчет, что такое приложение сразу, изначально делится на специальные контейнеры-слои, сразу и навсегда размещаемые в нужной последовательности по глубине. То есть курсоры (сейчас это не так актуально с новыми возможностями "честной" замены курсоров, ну допустим не курсоры а перетаскиваемые драгом объекты) помещаются в контейнер "на самом верху", под ним контейнер для модальных окон, ниже — для подсказок-хинтов и в самом низу — непосредственно интерфейс приложения. Как-то так в общих чертах.


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

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