Frage

Ich habe eine Reihe von Movieclip, in mehreren Movieclips gehalten, die eine benutzerdefinierte Bewegung -Ereignis, dass ich auf die Bühne möchte hören und die Interaktion mit. Gibt es einen Weg zur Bühne (oder jedes Objekt) ein Ereignis-Listener für jeden Fall eines Typen hinzufügen, unabhängig davon, wo es aus wurde versandt?

Zum Beispiel könnte ich hinzufügen, ein Ereignis-Listener auf die Bühne für jeden EVENT.COMPLETE zu hören, die von einem Kind, oder einem seiner Kinder versandt wurde, oder irgendetwas davon ist für Kinder Kinder?

War es hilfreich?

Lösung

Was Sie suchen ist Ereignis Sprudeln. Stellen Sie die dritte Eigenschaft eines neuen Ereignisses zu wahren Sprudeln zu ermöglichen, und es wird die Anzeigeliste sprudeln, von dem Objekt Beginn der Veranstaltung auf die Bühne Dispatching. Sehen Sie sich die offizielle Dokumentation für weitere Informationen.

Tyler.

Editiert: Change „von der Bühne Start“ auf „Objekt, das das Ereignis“

Andere Tipps

Nun, das ist etwas, das ich werde nie verstehen ... Warum Menschen auf der Bühne Ereignisse erfassen immer Ereignisse verwenden sprudeln?

Wenn Sie auf der doc aussehen, Veranstaltung von der Bühne auf das Zielobjekt propagiert wird (Erfassungsphase) und dann Blasen, wenn Sie ermöglichen sprudeln.

So ... nur Capture verwenden:

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);
        }

    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top