Domanda

Ho una serie di clip filmato, che si tiene all'interno di diverse clip filmato, che inviano un evento personalizzato mossa che vorrei sul palco per ascoltare e interagire con. C'è un modo per aggiungere alla fase (o qualsiasi altro oggetto) un listener di eventi per ogni evento di un solo tipo, indipendentemente da dove è stato spedito da?

Per esempio, potrei aggiungere alla fase di un listener di eventi per l'ascolto di qualsiasi EVENT.COMPLETE che è stato inviato da un bambino, o uno dei suoi figli, o da suoi figli dei figli?

È stato utile?

Soluzione

Quello che state cercando è spumeggiante evento. Impostare la terza proprietà di un nuovo evento su true per abilitare ribollimento, e sarà bolla l'elenco di visualizzazione, a partire dall'oggetto invia l'evento allo stadio. Vedere la documentazione ufficiale per maggiori informazioni.

Tyler.

A cura: Change "a partire dalla fase" a "oggetto che invia l'evento"

Altri suggerimenti

Bene, questo è qualcosa che capirò mai ... Perché la gente usa sempre spumeggiante eventi per acquisire gli eventi sul palcoscenico?

Se si guarda al doc, evento viene propagato dal palco per l'oggetto di destinazione (fase di cattura) e poi le bolle se si abilita spumeggiante.

Quindi ... basta usare 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);
        }

    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top