此代码缺少很多内容。让我们分解您的所有功能,看看发生了什么以及为什么不工作。
当您的计时器用完时,您尝试像这样删除两个侦听器:
removeEventListener(Event.ENTER_FRAME, addbEnemy);
removeEventListener(Event.ENTER_FRAME, onclick);
对于第一个,我无法弄清楚为什么这个函数甚至存在。它所做的只是将相同的Benemy 对象在每一帧中一遍又一遍地添加到舞台的完全相同的位置。你应该弄清楚为什么这个函数存在,如果它甚至是必要的。
至于第二个,onclick 不接受 ENTER_FRAME 事件。它需要一个 CLICK 事件。所以你需要把它改成这样才能移除点击事件:stage.removeEventListener(MouseEvent.CLICK, onclick);
太好了,现在您不能再单击添加项目符号了。但其他一切呢?好吧,您还没有删除任何控制其他对象的侦听器。您可以先停止所有正在运行的计时器。
tm.stop();
myTimer.stop();
tm.removeEventListener(TimerEvent.TIMER, onstart);
myTimer.removeEventListener(TimerEvent.TIMER, levelTimer);
好的,现在计时器已停止,因此不会产生新的敌人,并且船不会在每 60 秒后爆炸。
接下来是什么?英雄还在四处走动,所以去掉控制英雄的ENTER_FRAME事件:removeEventListener(Event.ENTER_FRAME, onenter);
最后一件事是屏幕上的所有敌人。
不幸的是,我什至没有在您发布的代码中看到处理敌人移动的代码。我假设他们的移动是在 enemy 类中处理的,因此您需要向该类添加一个停止函数,然后在每个敌人上调用它。
不幸的是,您的所有敌人都被添加到了 onstart() 函数的本地范围内的舞台上,因此您无法访问它们。有两种方法可以解决此问题:
- 对舞台上的所有孩子进行循环并检查每个孩子是否都是敌人,如果是,则调用您创建的停止函数。
- 在
onstart() 函数中,将每个敌人添加到一个数组中以存储对其的访问权限。然后,在levelTimer() 函数中,循环遍历每个数组元素并调用停止函数。