Вопрос

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

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

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

Решение

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

<Р> Тайлер.

<Р> Отредактировано: Изменить «начиная с этапа» до «объекта диспетчеризации события»

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

<Р> Ну, это что-то я никогда не пойму ... Почему люди всегда используют кипящий события для захвата событий на сцене? <Р> Если вы посмотрите на документ, событие распространяется от стадии к целевому объекту (фаза захвата), а затем пузыри, если вы включите пузыриться.

<Р> Итак ... просто использовать захват:

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