글로벌 이벤트를위한 플래시 이벤트 리스너
-
06-09-2019 - |
문제
나는 여러 movieclips 내에서 개최 된 일련의 movieclips를 가지고 있으며, 이는 무대에서 듣고 상호 작용하기를 원하는 사용자 정의 움직임 이벤트를 발송합니다. 파견 된 위치에 관계없이 한 유형의 이벤트에 대한 이벤트 리스너를 무대 (또는 객체)에 추가 할 수있는 방법이 있습니까?
예를 들어, 이벤트 청취자가 무대에 추가 할 수 있습니까? EVENT.COMPLETE
그것은 어린이, 자녀 또는 자녀의 자녀에게서 파견 되었습니까?
해결책
당신이 찾고있는 것은 이벤트 버블 링입니다. 새 이벤트의 세 번째 속성을 True로 설정하여 버블 링을 활성화하면 이벤트를 무대로 발송하여 객체에서 시작하여 디스플레이 목록을 기포합니다. 자세한 내용은 공식 문서를 참조하십시오.
타일러.
편집 : "무대에서 시작"으로 변경 "이벤트 파견"으로 변경
다른 팁
글쎄, 이것은 내가 결코 이해하지 못하는 것입니다 ... 왜 사람들이 항상 버블 링 이벤트를 사용하여 무대에서 이벤트를 포착합니까?
문서를 보면 이벤트가 단계에서 대상 객체 (캡처 위상)로 전파 된 다음 버블 링을 활성화하면 거품이 전파됩니다.
그래서 ... 캡처를 사용하십시오.
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