![]() |
|
||||||||||
|
|
|
|||||
|
Регистрация: Sep 2009
Сообщений: 68
|
От нефига делать (и от желания отточить скил) начал писать казуальную игрушкку типа "Танчики"
Итак, есть базовый класс WarMachine - это шаблон танка, при клике на стейдж внутри этого класса генерится объект типа Boolet, пуля которая меняет коородинаты на EnterFrame, и аттачится на главный стейдж. Посему вопросы: 1) Щас лиснер на клик аттачится на стейдже (выстрел). Можно ли зааттачить его внутри самого WarMachine? Пробовал через root.stage - не помогло 2) На стейдже лежит мувик booletContainer, в который надо складывать пули. Как к нему добратся их WarMachine? root.stage.addChild(b) работает, а root.stage.booletContainer.addChild(b) - нет 3) Сделал выстрел по нажатию пробела, тот способ что и с управлением через булевы переменные, где управление стрелками реализовано. Оно конечно работает, но поскольку висит на EnterFrame то пули вылетают пачками и надо очень коротко нажимать. Можно как-то это сделать попроще обрабатывать и назначать как с тем же Mouse Click? |
|
|||||
|
Регистрация: Jan 2003
Адрес: Latvia, Riga
Сообщений: 161
|
1) В базовом классе WarMachine, создайте статичную переменную и при инициализации главного класс присвойте в эту статичную переменную ссылку на stage, и потом из любого класса сможете обратиться к stage.
public static var STAGE:Stage; public function WarMachine():void { if (stage) init(); else addEventListener(Event.ADDED_TO_STAGE, init); } private function init(e:Event = null):void { STAGE = this.stage } Последний раз редактировалось RaVeN-Nikma; 11.07.2011 в 18:24. |
|
|||||
|
блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
|
1) да. У каждого display object'a, находящегося на сцене есть stage (код выше решает эту проблему симпатичнее, кстати, рекомендую).
2) Как-то передать WarMachine ссылку на booletContainer (bullet - правильно). Ну или дать возможность её достать =) Думаю передача параметром в конструктор тут - не криво совсем. 3) Ну можно на KEY_DOWN повесить. Можно смотреть, сколько с прошлого выстрела прошло. Как пан пожелает) PS: танчики - неказуальны. Казуалки на казуальных порталах и флешки на флеш порталах - разные вещи. Чисто терминологическая поправка %)
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают. |
|
|||||
|
Регистрация: Jan 2003
Адрес: Latvia, Riga
Сообщений: 161
|
2) Зависит от того как booletContainer добавляется на stage. Если через addChild, то дайте этому контейнеру name = "booletContainer" и обращайтесь к нему
|
|
|||||
|
блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
|
Если для точения скилла, а не быстро накидать, посмотреть и забыть, то про getChildByName - забыть.
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают. |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Сам по себе getChildByName не вреден. Вреден он в конкретно данном случае, но менее вреден, чем вариант со статическим stage.
|
|
|||||
|
Регистрация: Jan 2008
Сообщений: 84
|
Цитата:
Некие события stage нужны независимо от того, какая иерархическая структура результатирующего класса. Обычно, опыт и серьёзные проекты отметают возражения на этот счёт |
|
|||||
|
Регистрация: Jan 2008
Сообщений: 84
|
Мда, и как всегда - куча мусора, ничего дельного. Не знание основ работы display list`a, не умение широко мыслить, не знание "не шаблонных" приёмов программирования.
"потому что не находящиеся в display list объекты вообще не должны ничего делать" - (поржал вторично) Подытожим - использовать static stage дело правельное и нужное. Желательно указать в main.as Чистить за собой - это первый класс, обсуждать и указывать на использование removeEventListener - это бред, и так понятно. Думать что lifetime и interactions объекта привязаны к его видимости в displayList - очередной бред. срочно к санитару. Носится каждый раз по displayList`у с geChildByName() - за это стрелять в голову. (этож надо... name... так кодили на as2 во фреймах) К сожалению оппоненты использования static stage проявили высшую степень некомпетентности, не подкрепив весомыми аргументами и доказательствами своё мнение. За сим считаться с ними совершенная бессмыслица. P.s. Bgg это всего лишь вопрос профессионализма. сделай getter на static stage, а в setter`е не позволяй менять, если уже синициализировано. Последний раз редактировалось me2; 12.07.2011 в 12:05. |
|
|||||
|
Регистрация: Jan 2003
Адрес: Latvia, Riga
Сообщений: 161
|
Если контейнер один и добавляется всего раз на сцену, то просто запомните ссылку и обращайтесь через нее, можно даже сделать ее статичной (смотрите пример выше)
-De- - ну ты критикан =) |
|
|||||
|
Регистрация: Jan 2003
Адрес: Latvia, Riga
Сообщений: 161
|
Чем вреден статический Stage?
избавляет от множества проблем во внутренних классах, если надо вешать лисенеры MouseEvent (как бонус) Последний раз редактировалось RaVeN-Nikma; 11.07.2011 в 19:31. |
![]() |
![]() |
Часовой пояс GMT +4, время: 02:38. |
|
|
« Предыдущая тема | Следующая тема » |
|
|