Pergunta

Eu tenho uma série de clipes de filme, realizado dentro de alguns MovieClips, que despachar um evento de movimento personalizado que eu gostaria que o estágio para ouvir e interagir com. Existe uma maneira de adicionar ao palco (ou qualquer objeto) um ouvinte de eventos para qualquer evento de um tipo, independentemente de onde ele foi enviado a partir de?

Por exemplo, eu poderia adicionar ao palco um ouvinte de evento para ouvir qualquer EVENT.COMPLETE que foi enviado a partir de uma criança, ou qualquer de seus filhos, ou qualquer um dos filhos, é para crianças?

Foi útil?

Solução

O que você está procurando é subida do evento. Defina a terceira propriedade de um novo evento para true para permitir borbulhando, e vai refletir na lista de exibição, a partir do objeto despachar o evento para o palco. Veja a documentação oficial para mais informações.

Tyler.

Editado: Change "a partir do estágio" para "objeto despachar o evento"

Outras dicas

Bem, isso é algo que eu nunca vou entender ... Por que as pessoas sempre usam borbulhando eventos para eventos de captura no palco?

Se você olhar para o doc, o evento é propagado do palco para o objeto de destino (fase de captura) e, em seguida, bolhas se você habilitar borbulhando.

Assim ... apenas o uso de 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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top