Pregunta

Tengo una serie de clips de película, que tuvo lugar dentro de varios clips de película que se distribuyen un evento a medida movimiento que me gustaría que el escenario para escuchar e interactuar con. ¿Hay una manera de añadir a la etapa (o cualquier objeto) un detector de eventos para cualquier evento de un tipo, independientemente de donde se haya enviado desde?

Por ejemplo, podría añadir a la etapa de un detector de eventos para escuchar cualquier EVENT.COMPLETE que fue enviado desde un niño, o cualquiera de sus hijos, o cualquiera de sus hijos de los hijos?

¿Fue útil?

Solución

Lo que se busca es burbujeante evento. Ajuste la tercera propiedad de un nuevo evento en true para habilitar el burbujeo, y lo hará propagarse por la lista de visualización, a partir del objeto que distribuye el evento al escenario. Ver los documentos oficiales para obtener más información.

Tyler.

Editado: Cambio "a partir de la etapa" a "objeto que distribuye el evento"

Otros consejos

Bueno, esto es algo que nunca voy a entender ... ¿Por qué la gente siempre utilizan burbujeante eventos para capturar eventos en el escenario?

Si nos fijamos en el documento, el evento se propaga desde el escenario al objeto de destino (fase de captura) y luego burbujas si se habilita burbujeante.

Así que ... sólo tiene que utilizar la captura:

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

    }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top