as3中奇怪的事件时间年表

时间:2012-11-07 12:14:59

标签: actionscript-3

我今天编码时发现了一些奇怪的东西。我无法找到今天发生的事情。

我已经为它创建了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事件重新登记阶段。

感谢您解决我的问题。

1 个答案:

答案 0 :(得分:1)

您经历过一次所谓的“冒泡”事件。首先,将“click”事件分派到光标下的最顶层对象,然后通过父引用将其向上提升到舞台,如果不强制它e.stopPropagation()。因此,当事件在survivorModeBtn内被解析时,它还没有达到阶段,同时你为这类事件设置阶段监听器。然后它起泡并上演舞台,舞台上写着“哇,我有一个MouseEvent.CLICK听众注册了,我们现在就叫它吧!”并调用onClick()函数,使您收到最后的跟踪结果。