我不确定我的方式是否使垃圾收集器移除计时器。这是我的两个功能:
public function newWave() {
var callTimer:Timer = new Timer(800);
callTimer.start();
leftToSpawn = 4;
callTimer.addEventListener(TimerEvent.TIMER,waveCall);
}
public function waveCall(e:TimerEvent) {
leftToSpawn--;
if(leftToSpawn <= 0){
e.target.stop();
e.target.removeEventListener(TimerEvent.TIMER_COMPLETE,waveCall);
}
spawnEnemy();
}
由于
答案 0 :(得分:2)
要删除事件侦听器,您需要使用完全相同的签名将其删除。
如果你这样做:
.addEventListener(TimerEvent.TIMER,waveCall);
然后你需要使用相同的事件类型和函数来删除它:
.removeEventListener(TimerEvent.TIMER,waveCall);
在此处使用TimerEvent.TIMER_COMPLETE
将尝试删除不存在的侦听器,该侦听器将被忽略。
在这里使用target
是可以的,对于其他侦听器类型,您可能需要使用currentTarget
,它始终是侦听器添加到的对象。例如,在鼠标单击事件中,target
可能是MovieClip的子项,没有任何侦听器。
答案 1 :(得分:1)
此外,计时器已经能够重复指定的次数,正确的代码将是这样的:
public function newWave() {
var callTimer:Timer = new Timer(800, 4); //repeat 4 times
callTimer.start();
callTimer.addEventListener(TimerEvent.TIMER,waveCall);
}
public function waveCall(e:TimerEvent) {
spawnEnemy();
}
答案 2 :(得分:0)
只是改变:
e.target.removeEventListener(TimerEvent.TIMER_COMPLETE,waveCall);
到
e.target.removeEventListener(TimerEvent.TIMER,waveCall);