![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Aug 2011
Сообщений: 29
|
Привет.
Пара вопросов ![]() Main.as package { import flash.display.Sprite; import flash.events.Event; import flash.display.DisplayObject; import elements.Tower; import flash.events.MouseEvent; /** * ... * @author reQuiem */ public class Main extends Sprite { public function Main():void { if (stage) init(); else addEventListener(Event.ADDED_TO_STAGE, init); } private function init(e:Event = null):void { removeEventListener(Event.ADDED_TO_STAGE, init); // entry point addTower(); } private function addTower():void { var tower_1: Tower = new Tower(); this.addChild(tower_1); tower_1.x = 300; tower_1.y = 300; tower_1.addEventListener("towerClick", towerClicked); trace("tower ready"); } public function towerClicked (e:Event): void { trace("tower clicked"); stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveFunc); stage.addEventListener(MouseEvent.MOUSE_UP, mouseUPFunc); } private function mouseMoveFunc (e:MouseEvent ):void { trace("mouse MOVE"); } private function mouseUPFunc (e:MouseEvent ):void { stage.removeEventListener(MouseEvent.MOUSE_MOVE, mouseMoveFunc); } } } Tower.as package elements { import flash.display.MovieClip; import flash.events.Event; import flash.events.MouseEvent; import flash.display.DisplayObject; import flash.events.EventDispatcher; /** * ... * @author reQuiem */ public class Tower extends MovieClip { public function Tower() { this.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownFunc); } public function mouseMoveFunc():void { trace("OK"); } public function mouseDownFunc(e:MouseEvent): void { dispatchEvent(new Event("towerClick")); } } } Вопросы: 1)Если я диспатчу событие из класса то подписать на это событие я мог только экземпляр этого класса? просто addEventListener("towerClick", towerClicked); не ловит, а tower_1.addEventListener("towerClick", towerClicked); ловит. 2) не получается вызвать методы( и менять значение переменных) через экземпляр класса в функции отлично от той где я его создаю. то есть сейчас в мейне у меня есть но если я попытаюсь изменить tower_1.x в любом другом месте - выдает ошибку. ( в это время tower_1 гарантированно существует и например ловит\кастует события). Вот пока все. Знаю что вопросы очень нубские но пытаясь пересесть кадров они мне пока не даются. Спасибо. |
|
|||||
|
Цитата:
Цитата:
public class Main extends Sprite { public function Main():void { if (stage) init(); else addEventListener(Event.ADDED_TO_STAGE, init); } private function init(e:Event = null):void { removeEventListener(Event.ADDED_TO_STAGE, init); // entry point addTower(); } private var tower_1:Tower; private function addTower():void { tower_1 = new Tower(); this.addChild(tower_1); tower_1.x = 300; tower_1.y = 300; tower_1.addEventListener("towerClick", towerClicked); trace("tower ready"); }}
__________________
http://www.chessmax.ru Последний раз редактировалось Inet_PC; 28.01.2012 в 21:58. |
|
|||||
|
Регистрация: Aug 2011
Сообщений: 29
|
1) ок. понял.
2) ага, если у меня известное количество объектов ясно, а что если я добавляю эти объекты по ходу дела и не знаю сколько у меня будет экземпляров и каких объектов? Создавать для каждого возможно появящегося типа(класса) свою переменную в мейне заранее? |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Цитата:
2) Конечно нет. Ссылки на экземпляры не обязательно должны храниться в приватных полях класса напрямую, они могут храниться в массиве или векторе, или добавленные как дети дисплейлиста в контейнере. Но в любом случае на объект должна быть хотя бы одна ссылка, иначе он будет удален из памяти Сборщиком Мусора. Что касается событий, которые эти объекты ыбудут рассылать – вы подпишитесь на них сразу после создания объекта, а в обработчике событий узнать, какой именно экземпляр послал событие, можно из свойств объекта События, который непременно получает слушатель-обработчик. У этого объекта есть поля target и currentTarget.
__________________
Reality.getBounds(this); |
|
|||||
|
Регистрация: Aug 2011
Сообщений: 29
|
спасибо, разобрался.
|
![]() |
![]() |
Часовой пояс GMT +4, время: 01:20. |
|
|
« Предыдущая тема | Следующая тема » |
|
|