прослушиватель флэш-событий для глобальных событий
-
06-09-2019 - |
Вопрос
У меня есть серия видеороликов, удерживаемых в рамках нескольких видеороликов, которые отправляют пользовательское событие перемещения, которое я хотел бы, чтобы сцена прослушивала и взаимодействовала с ним.Есть ли способ добавить на сцену (или любой объект) прослушиватель событий для любого события одного типа, независимо от того, откуда оно было отправлено?
Например, могу ли я добавить на сцену прослушиватель событий для прослушивания любых EVENT.COMPLETE
это было отправлено от ребенка, или любого из его детей, или любого из детей его детей?
Решение
То, что вы ищете, - это бурление событий.Установите третьему свойству нового события значение true, чтобы включить пузырьковое отображение, и оно увеличит список отображения, начиная с объекта, отправляющего событие на сцену.Смотрите официальные документы для получения дополнительной информации.
Тайлер.
Отредактированный:Измените "начиная со стадии" на "объект, отправляющий событие".
Другие советы
Что ж, это то, чего я никогда не пойму...Почему люди всегда используют бурлящие события для съемки событий на сцене?
Если вы посмотрите на документ, событие распространяется от этапа к целевому объекту (фаза захвата), а затем всплывает, если вы включаете пузырькование.
Итак ...просто используйте capture :
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);
}
}
}