0

Я делаю игру, используя AS3. У меня есть три класса: (Spaceship, UFO, Scoreboard) которые все дети класса GameEngine.Как отправить событие из одного класса и прослушать его в другом классе, который не является дочерним или родительским для первого класса?

Я хочу поставить eventListeners в Бюллетеня, а затем отправить dispatchEvents из Spaceship и НЛО обновить табло экземпляр .

С Spaceship и НЛО не являются ни родители или дети Бюллетеня, добавляя барботирования = истинный параметр к dispatchEvent ничего не делает.

Как получить табло для прослушивания * dispatchEvent * s, не делая это:

GameEngine.scoreboard.dispatchEvent (новое событие ("shipWasHit", правда));

Это кажется глупым, чтобы сделать это таким образом. Зачем мне вообще использовать диспетчер отправки - почему бы не вызвать функцию напрямую? И что, если я хочу, чтобы другие классы слушали один и тот же диспетчер?

Просьба сообщить.

ответ

2

Проверьте шаблон наблюдателя. Вот хорошая ссылка:

http://www.swinburne.edu.au/design/tutorials/P-flash/T-The-Observer-Design-Pattern-in-Actionscript-3/ID-145/

+0

ah bummer, я перечислил это как хорошую ссылку, потому что раньше у нее была ссылка для загрузки примера FLA. теперь, кажется, сломан. В любом случае, шаблон Observer - это то, что нужно. :) – Ribs

1

Поскольку любое событие, которое использует либо фазы захвата или фазу пузыря, который не имеет его распространения прервало проходит через стадию, вы можете просто добавить слушатель для сцены внутри указанный класс.

Пример кода:

public function Receiver() 
{ 
    addEventListener(Event.ADDED_TO_STAGE, added, false, 0, true); 
} 

private function added(evt:Event):void 
{ 
    stage.addEventListener(Event.shipWasHit, shipHit, false, 0, true); 
} 

private function shipHit(evt:Event):void 
{ 
    //code 
    evt.stopPropagation(); 
} 

Теперь, есть несколько предостережений здесь. Во-первых, этот класс должен быть создан и добавлен на сцену, чтобы ссылаться на сцену. В противном случае вам нужно будет перейти на сцену в качестве параметра, и это может вернуть значение null в случаях. Наконец, вам нужно будет создать экземпляр этого события до отправки события, хотя это не похоже на код, который я вижу прямо сейчас.

0

Ваш космические корабли и НЛО бы сделать это:

dispatchEvent(new Event("shipWasHit")); 

и ваше табло должны были бы знать, какие космические корабли и НЛО, чтобы слушать для этих событий:

someShip.addEventListener("shipWasHit", onShipHit); 

и

thatUFO.addEventListener("shipWasHit", onUFOHit); 

Хорошее место для добавления этих слушателей находится в классе, который создает эти Космические аппараты и НЛО, или в самом табло, если в какой-то момент вы скажете, какие корабли и НЛО должны слушать.