문제

나는 여러 movieclips 내에서 개최 된 일련의 movieclips를 가지고 있으며, 이는 무대에서 듣고 상호 작용하기를 원하는 사용자 정의 움직임 이벤트를 발송합니다. 파견 된 위치에 관계없이 한 유형의 이벤트에 대한 이벤트 리스너를 무대 (또는 객체)에 추가 할 수있는 방법이 있습니까?

예를 들어, 이벤트 청취자가 무대에 추가 할 수 있습니까? EVENT.COMPLETE 그것은 어린이, 자녀 또는 자녀의 자녀에게서 파견 되었습니까?

도움이 되었습니까?

해결책

당신이 찾고있는 것은 이벤트 버블 링입니다. 새 이벤트의 세 번째 속성을 True로 설정하여 버블 링을 활성화하면 이벤트를 무대로 발송하여 객체에서 시작하여 디스플레이 목록을 기포합니다. 자세한 내용은 공식 문서를 참조하십시오.

타일러.

편집 : "무대에서 시작"으로 변경 "이벤트 파견"으로 변경

다른 팁

글쎄, 이것은 내가 결코 이해하지 못하는 것입니다 ... 왜 사람들이 항상 버블 링 이벤트를 사용하여 무대에서 이벤트를 포착합니까?

문서를 보면 이벤트가 단계에서 대상 객체 (캡처 위상)로 전파 된 다음 버블 링을 활성화하면 거품이 전파됩니다.

그래서 ... 캡처를 사용하십시오.

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