Actionscript 3 这是移除计时器的正确方法吗?
我不确定我这样做是否会让垃圾收集器删除计时器。以下是我的两项职能:Actionscript 3 这是移除计时器的正确方法吗?,actionscript-3,Actionscript 3,我不确定我这样做是否会让垃圾收集器删除计时器。以下是我的两项职能: public function newWave() { var callTimer:Timer = new Timer(800); callTimer.start(); leftToSpawn = 4; callTimer.addEventListener(TimerEvent.TIMER,waveCall); } public function waveCall(e:TimerEvent) {
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();
}
公共函数newWave(){
var callTimer:Timer=新定时器(800);
callTimer.start();
leftToSpawn=4;
callTimer.addEventListener(TimerEvent.TIMER,waveCall);
}
公共函数waveCall(e:TimerEvent){
左撇子;
如果(leftToSpawn只需更改:
e.target.removeEventListener(TimerEvent.TIMER_COMPLETE,waveCall);
到
要删除事件侦听器,您需要使用完全相同的签名删除它
如果您这样做:
.addEventListener(TimerEvent.TIMER,waveCall);
然后,您需要使用相同的事件类型和函数来删除它:
.removeEventListener(TimerEvent.TIMER,waveCall);
在此处使用TimerEvent.TIMER\u COMPLETE
将尝试删除不存在的侦听器,该侦听器将被静默忽略
在此处使用target
是可以的,对于其他侦听器类型,您可能需要使用currentTarget
,它始终是侦听器添加到的对象。例如,在鼠标单击事件中,target
可能是MovieClip的子对象,并且没有任何侦听器。此外,计时器已经能够重复指定的number的时间和正确的代码如下:
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();
}
仍然可以重置计时器,并在4次计时器停止后再次使用它。侦听器仍然会在那里。这是一个垃圾收集问题,所以我想这不是glados想要的答案。这仍然是一个很好的解决方案。
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();
}