Слушатель флэш событие для глобальных событий
https://stackoverflow.com/questions/928166
Вопрос
<Р> У меня есть ряд MovieClips, проведенный в течение нескольких MovieClips, что отправляет событие пользовательского перемещения, я хотел бы на сцену, чтобы слушать и взаимодействовать с. Есть ли способ, чтобы добавить к стадии (или любой другой объект) слушатель событий для любого события одного типа, независимо от того, где он был послан из?
<Р> Например, я мог добавить к сцене слушатель событий для прослушивания любого
EVENT.COMPLETE
, который был посланной от ребенка, или любой из его детей, или любой из его детей дети? Решение
<Р> То, что вы ищете пузыриться событие. Установите третье свойство нового события истинно для того, чтобы бульканье, и он будет пузыриться список отображения, начиная с объекта диспетчеризации события на сцене. Смотрите официальные документы для получения дополнительной информации.
<Р> Тайлер.
<Р> Отредактировано: Изменить «начиная с этапа» до «объекта диспетчеризации события»
Другие советы
<Р> Ну, это что-то я никогда не пойму ... Почему люди всегда используют кипящий события для захвата событий на сцене? Р>
<Р> Если вы посмотрите на документ, событие распространяется от стадии к целевому объекту (фаза захвата), а затем пузыри, если вы включите пузыриться.
<Р> Итак ... просто использовать захват:
Main.as
package {
import flash.display.Sprite;
public class Main extends Sprite
{
public function Main()
{
var c:Circle = new Circle();
var r:Rect = new Rect();
c.addChild(r);
addChild(c);
addEventListener(CustomEvent.CUSTOM, customEventHandler, true);//don't forget third parameter to use capture
}
private function customEventHandler(e:CustomEvent):void
{
trace(e.eventPhase == EventPhase.CAPTURING_PHASE);//shows true
}
}
}
Circle.as
package
{
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
public class Circle extends Sprite
{
public function Circle()
{
super();
init();
}
private function init():void
{
with(graphics)
{
beginFill(0xFF0000);
drawCircle(25, 25, 50);
endFill()
}
}
}
}
Rect.as
package
{
import flash.display.Sprite;
import flash.events.MouseEvent;
public class Rect extends Sprite
{
public function Rect()
{
super();
init();
}
private function init():void
{
with(graphics)
{
beginFill(0x000000);
drawRect(0, 0, 25, 25);
endFill();
}
addEventListener(MouseEvent.CLICK, mouseClickHandler);
}
private function mouseClickHandler(e:MouseEvent):void
{
dispatchEvent(new CustomEvent(CustomEvent.CUSTOM));
}
}
}
<Р> CustomEvent.as р>
package
{
import flash.events.Event;
public class CustomEvent extends Event
{
public static const CUSTOM:String = "custom";
public function CustomEvent(type:String, bubbles:Boolean=false, cancelable:Boolean=false)
{
super(type, bubbles, cancelable);
}
}
}
Не связан с StackOverflow