прослушиватель флэш-событий для глобальных событий

StackOverflow https://stackoverflow.com/questions/928166

Вопрос

У меня есть серия видеороликов, удерживаемых в рамках нескольких видеороликов, которые отправляют пользовательское событие перемещения, которое я хотел бы, чтобы сцена прослушивала и взаимодействовала с ним.Есть ли способ добавить на сцену (или любой объект) прослушиватель событий для любого события одного типа, независимо от того, откуда оно было отправлено?

Например, могу ли я добавить на сцену прослушиватель событий для прослушивания любых EVENT.COMPLETE это было отправлено от ребенка, или любого из его детей, или любого из детей его детей?

Это было полезно?

Решение

То, что вы ищете, - это бурление событий.Установите третьему свойству нового события значение true, чтобы включить пузырьковое отображение, и оно увеличит список отображения, начиная с объекта, отправляющего событие на сцену.Смотрите официальные документы для получения дополнительной информации.

Тайлер.

Отредактированный:Измените "начиная со стадии" на "объект, отправляющий событие".

Другие советы

Что ж, это то, чего я никогда не пойму...Почему люди всегда используют бурлящие события для съемки событий на сцене?

Если вы посмотрите на документ, событие распространяется от этапа к целевому объекту (фаза захвата), а затем всплывает, если вы включаете пузырькование.

Итак ...просто используйте 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);
        }

    }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top