我今天编码时发现了一些奇怪的东西。我无法找到今天发生的事情。
我已经为它创建了button和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);
}
Dispatched事件将运行代码的这些部分:
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()");
}
当我运行程序并单击第一个按钮时。我在控制台输出了这个输出:
我在这里用按钮注册了Event Listener 我在这里点击了btn 在这里我注册事件监听器MouseEvent.Click 的onClick()
我无法理解如果只点击第一个按钮,我怎么能看到“onClick()”消息,即使在那段时间没有用CLICK事件重新登记阶段。
感谢您解决我的问题。
答案 0 :(得分:1)
您经历过一次所谓的“冒泡”事件。首先,将“click”事件分派到光标下的最顶层对象,然后通过父引用将其向上提升到舞台,如果不强制它e.stopPropagation()
。因此,当事件在survivorModeBtn
内被解析时,它还没有达到阶段,同时你为这类事件设置阶段监听器。然后它起泡并上演舞台,舞台上写着“哇,我有一个MouseEvent.CLICK听众注册了,我们现在就叫它吧!”并调用onClick()
函数,使您收到最后的跟踪结果。