自定义事件在AS3中不起作用



我有一个称为selectevent的事件。每当我单击买家时,都应启动选择事件。但这不是发生的事情。

我的基本代码:

package 
{
    import flash.display.MovieClip;
    import flash.utils.Timer;
    import flash.events.TimerEvent;
    import flash.events.MouseEvent;
    public class FashionFrenzy extends MovieClip
    {
        public var Buyer_mc:Buyer;
        public var Buyers:Array;
        private var BuyerNumber:Number;
        public var xpositions:Array;
        public var ypositions:Array;
        public var SelectedBuyer:Number;
        public function FashionFrenzy()
        {
            GameTimeController();
            xpositions=new Array();
            xpositions.push(523,563,603);
            ypositions=new Array();
            ypositions.push(377,377,377);
            Buyers = new Array  ;
            BuyerNumber=0;

            Time_mc.gameTimer.addEventListener(TimerEvent.TIMER,GenerateBuyers);
            addEventListener(SelectEvent.BUYERSELECT,showselectbuyer);

        }

        public function GameTimeController()
        {
            Time_mc.StartGame();
        }
        public function showselectbuyer(event:SelectEvent):void
        {
            trace("Bamba");         
        }
        public function GenerateBuyers(event:TimerEvent):void
        {
            if(BuyerNumber<6)
            {
                if (Math.random() < 0.01)
                {
                    var position:Number = Math.floor(Math.random()*3);
                    var newBuyer_mc = new Buyer(xpositions[position],ypositions[position],BuyerNumber);
                    ypositions[position]-=40;
                    Buyers.push(newBuyer_mc);
                    addChild(newBuyer_mc);
                    BuyerNumber++;
                }
            }
                for each (var buyer_mc:Buyer in Buyers)
                {
                    if(buyer_mc.walking==true)
                    {
                        buyer_mc.Enter();

                    }

                }

        }




    }
}

我的买家代码:

package 
{
    import flash.display.MovieClip;
    import flash.utils.Timer;
    import flash.events.TimerEvent;
    import flash.events.MouseEvent;
    public class Buyer extends MovieClip
    {
        public var buyerTimer:Timer;
        public var walking:Boolean;
        public var stopposition:Number;
        public var buyerCode:Number;

        public function Buyer(startx:Number, stopy:Number, code:Number)
        {
            x=startx;
            stopposition=stopy;
            walking=true;
            buyerCode=code;
            BuyerProperties();
        }
        public function Enter():void
        {
            if(y>stopposition)
            {
                walking=false;
                StartFunction();
            }
            else
            {
                y= y+3;
            }
        }
        public function BuyerProperties():void
        {
            buyerTimer = new Timer( 25 );
            trace(" I am generated");
        }
        public function StartFunction():void
        {
            buyerTimer.start();
            addEventListener(MouseEvent.CLICK,Select);
            trace("My timer starts now within Buyer.as");
        }
        public function Select(event:MouseEvent):void
        {
            trace(buyerCode);
            dispatchEvent( new SelectEvent(SelectEvent.BUYERSELECT));
        }


    }
}

现在,当我单击买家时,请激活mouseevent.click,然后在买家中。但是该事件没有派遣,否则已派遣,但EventListener没有执行代码。我没有任何运行时错误。

甚至从未启动过" ShowSelectBuyer"功能。

我应该如何解决它?

接受的答案不正确。提供的解决方案有效,但出于错误的原因。它可以直接依赖于应该聆听自定义事件的对象,然后使该对象成为调度程序。这一切都使使用事件/自定义事件的整个想法充其量是不必要的,因为在这种情况下,简单的回调也可以正常工作。而是使用USECAPTURE标志将使整个系统按预期工作:

addEventListener(SelectEvent.BUYERSELECT,showselectbuyer, true);

接受的解决方案也是处理非显示对象事件传播的相反方法。调度程序应为侦听器(无依赖项),而不是侦听器应为调度员(需要依赖)。

自定义事件的麻烦是他们不会冒出显示列表,因此,如果您的事件要注册附带的事件。在您的情况下,这是FashionFrenzy的实例。显然,买家不知道他们正在遇到的时尚狂热实例,因此他们向自己派遣活动,想知道为什么没有其他人听。为了解决此问题,要么将听众附加到买家,要么在买方类中,将事件派遣到parent,这显然是您要接收事件的实例。

最新更新