AS3中的奇怪事件时间年表



我今天在编码时发现了一些奇怪的东西。我无法找到今天对我有什么解释。

我为其创建了按钮和addeventListener。

private function drawButtons():void{
        survivorModeBtn = new SurvivorModeBtn();    
        trace("I registered Event Listener with button here");
        survivorModeBtn.addEventListener(MouseEvent.CLICK,onSurvivorModeBtnClick);
        addChild(survivorModeBtn);
}
private function onSurvivorModeBtnClick(e:MouseEvent):void{
        trace("I clicked on btn here");
        //I will dispatch event here which runs second part of code
        mainMenuViewEvent = new MainMenuViewEvent("onSurvivorModeIsClicked");
        hideButtons();
        dispatchEvent(mainMenuViewEvent);
}

调度事件将运行代码的那些部分:

public function createClickToStart():void{
        trace("here I register event listener MouseEvent.Click");
        stage.addEventListener(MouseEvent.CLICK,onClick);
    }
private function onClick(e:MouseEvent):void{
        trace("onClick()");
    }

运行程序并单击第一个按钮时。我在控制台中获得了此输出:

我在此处注册了带有按钮的事件侦听器我在这里点击了BTN在这里,我注册活动听众mouseevent.clickonclick()

我可以理解我如何看到" onclick()"味精,如果我仅在第一个按钮上单击,即使在那段时间也没有单击事件进行重新分配。

感谢您解决我的问题。

您已经体验了事件的"冒泡"。首先,将"点击"事件派遣到光标下的最顶对象,然后,如果您不强迫 e.stopPropagation(),则它通过父范围一直向上升高。因此,当该事件在survivorModeBtn中解析时,它尚未到达舞台,同时您会为此类型的事件进行舞台侦听器。然后它起泡并上场舞台,Stage说:"哇,我有一个Mouseevent。单击听众注册,我们现在就称呼它!"并调用onClick()功能,使您收到最后的跟踪结果。