我今天在编码时发现了一些奇怪的东西。我无法找到今天对我有什么解释。
我为其创建了按钮和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()
功能,使您收到最后的跟踪结果。