我有一个我在FlexBuilder中构建的AS3项目。
在我的主类的构造函数中,我得到了这个:
stage.addEventListener(Event.ENTER_FRAME, stage_enterFrameHandler);
然后是事件处理函数:
private var tempCounter:uint = 0;
private function stage_enterFrameHandler(event:Event):void
{
stage.removeEventListener(Event.ENTER_FRAME, stage_enterFrameHandler);
tempCounter += 1;
trace(tempCounter);
}
当我在调试模式下运行时,tempCounter写出一次,为1.这是为什么?我虽然Event.ENTER_FRAME的重点在于它一直在射击。
如果播放头没有移动,或者只有一个帧,则会结合帧速率连续调度此事件。此事件将同时分派给侦听此事件的所有显示对象。
那么为什么我不会看到计数器每秒增加约30倍(这是我设置的帧速率)?
编辑注:
好吧,好吧,啊,我已经弄清楚了。这是因为我立即删除了eventlistener。 ENTER_FRAME事件确实继续触发......我想,代码以这种方式完成的唯一原因(我继承的代码)是,如果你不使用flex框架,CREATION_COMPLETE不可用。答案 0 :(得分:1)
答案很简单,只要在输入框中输入您正在删除监听器,以便下次输入框架事件发生时,没有人对其做出反应。
删除该行
stage.removeEventListener(Event.ENTER_FRAME, stage_enterFrameHandler);