Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 这是移除计时器的正确方法吗?_Actionscript 3 - Fatal编程技术网

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();
}