سؤال

لدي سلسلة من movieclips، التي عقدت داخل العديد من movieclips، التي ترسل حدث تحريك مخصص وأود أن الاستماع إلى المرحلة للاستماع إليها والتفاعل معها. هل هناك طريقة للإضافة إلى المرحلة (أو أي كائن) مستمع حدث لأي حدث من نوع واحد، بغض النظر عن المكان الذي تم إرساله منه؟

على سبيل المثال، هل يمكنني إضافة إلى مرحلة مستمع حدث للاستماع لأي EVENT.COMPLETE التي تم إرسالها من طفل، أو أي من أطفالها، أو أي شخص من أطفال الأطفال؟

هل كانت مفيدة؟

المحلول

ما تبحث عنه هو فقاعة الحدث. قم بتعيين الخاصية الثالثة من الحدث الجديد إلى True لتمكين الفقاعات، وسوف تقوم بفقاعة قائمة العرض، بدءا من الكائن إرسال الحدث إلى المرحلة. انظر المستندات الرسمية لمزيد من المعلومات.

تايلر.

تم التعديل: تغيير "بدء من المرحلة" إلى "الكائن إرسال الحدث"

نصائح أخرى

حسنا، هذا شيء لن أفهمه أبدا ... لماذا يستخدم الناس دائما الأحداث الفقاعية لالتقاط الأحداث على المسرح؟

إذا نظرت إلى DOC، فسيتم نشر الحدث من المرحلة إلى الكائن الهدف (مرحلة الالتقاط) ثم فقاعات إذا قمت بتمكين الفقاعات.

لذلك ... فقط استخدم التقاط:

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