グローバルイベント用のフラッシュイベントリスナー
-
06-09-2019 - |
質問
私は、私が聞くと相互作用し、ステージをご希望のカスタムムーブイベントを送出し、いくつかのムービークリップ内に保持されたムービークリップ、一連のを持っています。ステージに追加する方法(または任意のオブジェクト)一つのタイプのいずれかのイベントのイベントリスナーには関係なく、それがから派遣されたところの、ありますか?
たとえば、私は、子供から派遣された任意の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