Форум 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=212903)

undefined 29.05.2016 21:50

в таком случае в этом коде не много смысла.Если у экрана есть ссылка на стейдж -this.stage, значит он уже туда добавлен и добавлять его снова имеет смысл только чтоб быстро переместить его поверх всего, что уже есть на стейдже.Все это сильно напоминает г****код.
Еще раз - экран не должен сам добавлять себя никуда.Может статься, что добавлять его надо будет не на стейдж, а в какой-нибудь контейнер.Экран должен оповестить ответственного что его надо показать .Аналогично в нужный момент он должен оповестить что пора его скрыть.

neonoviiwolf 30.05.2016 00:21

хм, я решил подобный вопрос иначе, мож поможет. У меня все классы(кроме одного) имеют ссылку на stage, дабы не морочиться кто кого должен добавлять. А дабы не писать спагетти, то у каждого класса есть список моих событий (своих наделал), на что и как реагировать. Нажал человек кнопку "play" кнопка отправило событие "NEW_PLAY". Все классы, которые должны как либо среагировать, подписаны на это событие и выполняют свой код. В итоге все классы общаются друг с другом только через события, зависимости минимальны, фактически можно отключать целые ветки кода и все будет работать, так же удобно включать новые классы, в одном месте общем написал this.addChild(new MyClass), что добавить его на сцену и всё, остальная логика реализуется внутри класса(ов)

undefined 30.05.2016 09:04

ага, вот только если выяснится что надо, например, перенести все содержимое из стейджа в рут или еще куда придется править 100500 классов.

Azrael 30.05.2016 10:15

Цитата:

Сообщение от undefined (Сообщение 1194410)
в таком случае в этом коде не много смысла.Если у экрана есть ссылка на стейдж -this.stage, значит он уже туда добавлен и добавлять его снова имеет смысл только чтоб быстро переместить его поверх всего, что уже есть на стейдже.Все это сильно напоминает г****код.
Еще раз - экран не должен сам добавлять себя никуда.Может статься, что добавлять его надо будет не на стейдж, а в какой-нибудь контейнер.Экран должен оповестить ответственного что его надо показать .Аналогично в нужный момент он должен оповестить что пора его скрыть.

Да ссылка на stage у него есть, она собственно будет у всех экранов, игра простая состоит из 4 экранов которые по-очереди добавляются на stage (добавили 1, нажали next = убрали 1 добавили 2, во втором нажали next = убрали 2 добавили 3, в третьем нажали next = убрали 3 добавили 4) В этом случае если у меня не предусмотрен "обратный ход" предыдущий код верен?

По поводу ссылки - в main мне надо сделать так да?

Код AS3:

public static stage:Stage;
 
function Main()
{
Main.stage = stage;
}

И отвественный уже будет добавлять экран таким образом:

Код AS3:

Main.stage.addChild(Screen);


undefined 30.05.2016 13:45

если не планируешь код сильно расширять - пиши как удобнее.
Цитата:

По поводу ссылки - в main мне надо сделать так да?
Если Main - документ класс в этом нет необходимости т.к. у него и так всегда есть ссылка на стейдж -
this.stage.

Azrael 30.05.2016 20:58

Цитата:

Сообщение от undefined (Сообщение 1194419)
Если Main - документ класс в этом нет необходимости т.к. у него и так всегда есть ссылка на стейдж -
this.stage.

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

undefined 30.05.2016 21:33

Цитата:

Если Main - документ класс в этом нет необходимости т.к. у него и так всегда есть ссылка на стейдж - this.stage.
Если он не документ-класс хранить ссылку на корневой DO допустимо.
на форуме часто рекомендуют не цеплять ничего на стейдж, а все пихать в рут, т.к. стейдж не является DisplayObjectContainer и поэтому некоторые плюхи для него недоступны.Рут по большому счету тоже не является, но он допускает приведение к DisplayObjectContainer.

Wolsh 31.05.2016 08:46

Цитата:

на форуме часто рекомендуют не цеплять ничего на стейдж, а все пихать в рут, т.к. стейдж не является DisplayObjectContainer
Если бы Stage не был DisplayObjectContainer, вам бы и не удалось ничего туда "пихать". Но Stage не является частью вашего приложения. Это контейнер, В КОТОРОМ находится ваше приложение (загруженный плеером ролик).
Цитата:

Рут по большому счету тоже не является, но он допускает приведение к DisplayObjectContainer.
Рут является DisplayObjectContainer просто по-определению. Не будь он контейнером, ему не стать рутом.

undefined 31.05.2016 12:09

Цитата:

Если бы Stage не был DisplayObjectContainer, вам бы и не удалось ничего туда "пихать". Но Stage не является частью вашего приложения. Это контейнер, В КОТОРОМ находится ваше приложение (загруженный плеером ролик).
Согласен тут был не прав.
Цитата:

Рут является DisplayObjectContainer просто по-определению. Не будь он контейнером, ему не стать рутом.
А вот тут не все так просто.Например
Код AS3:

trace(root is DisplayObjectContainer);//true
trace(root.tabEnabled);// compile time error(Error: Access of possibly undefined property tabEnabled through a reference with static type flash.display:DisplayObject.)
trace((root as DisplayObjectContainer).tabChildren);//без ошибок

хотя tabEnabled - родное свойство DisplayObjectContainer'а.
Т.е. рут по меньшей мере не обычный DOC.

Добавлено через 26 минут
Код AS3:

trace(root.getChildAt(0));

аналогично ошибка компиляции

ObOs 31.05.2016 12:58

Цитата:

Сообщение от undefined (Сообщение 1194440)
Согласен тут был не прав.

А вот тут не все так просто.Например
Код AS3:

trace(root is DisplayObjectContainer);//true
trace(root.tabEnabled);// compile time error(Error: Access of possibly undefined property tabEnabled through a reference with static type flash.display:DisplayObject.)
trace((root as DisplayObjectContainer).tabChildren);//без ошибок

хотя tabEnabled - родное свойство DisplayObjectContainer'а.
Т.е. рут по меньшей мере не обычный DOC.

Добавлено через 26 минут
Код AS3:

trace(root.getChildAt(0));

аналогично ошибка компиляции

А если дождаться добавления на сцену?;)


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

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