Flash AS3使用多定时器显示/隐藏敌人

Flash AS3使用多定时器显示/隐藏敌人,flash,actionscript-3,timer,Flash,Actionscript 3,Timer,我有一个射击游戏,可以用一些回合,例如,这一回合将在屏幕上显示用户必须射击的4个敌人。我以每一个半秒的间隔显示4个敌人,这样它就不会同时出现。使用类似于: enemiesShowTimer = new Timer(0.5 * 1000, 1); enemiesShowTimer.addEventListener(TimerEvent.TIMER, showEnemyAtTime); enemiesShowTimer.start(); 玩家在每个敌人出现后有2秒的时间杀死他们,所以我也使用这个:

我有一个射击游戏,可以用一些回合,例如,这一回合将在屏幕上显示用户必须射击的4个敌人。我以每一个半秒的间隔显示4个敌人,这样它就不会同时出现。使用类似于:

enemiesShowTimer = new Timer(0.5 * 1000, 1);
enemiesShowTimer.addEventListener(TimerEvent.TIMER, showEnemyAtTime);
enemiesShowTimer.start();
玩家在每个敌人出现后有2秒的时间杀死他们,所以我也使用这个:

enemiesCleanTimer = new Timer(roundConfig.getSecondsPerEnemy() * 1000, 1);
enemiesCleanTimer.addEventListener(TimerEvent.TIMER, cleanEnemies);
enemiesCleanTimer.start();
问题是,在玩家死后,我改变场景,如果我还有3个活着的敌人,线程将尝试运行这些方法,它将崩溃。每当我需要定时器时,我总是使用相同的变量来启动它。我怎样才能解决这个问题?我是否必须将每个“线程”(计时器)存储在列表中,然后分别停止每个线程?因为它是这样的,其他线程处于某种“边缘”,我不能停止然后,只有最后一个

有什么帮助吗


谢谢大家!

首先,非常快,我只想说这里没有线程,因为3没有任何多线程。所以,让我们避免使用这个词,因为它有非常具体的含义。这不是它,使用它会导致混乱

现在,对于您的问题,是的,当您完成计时器时,您需要停止每个计时器。因此,在切换场景时,您需要保留对每个场景的引用,然后调用stop或reset。一种简单的方法是将它们全部存储在一个数组中,并在需要停止它们时在其上循环


希望这会有所帮助,如果您还有其他问题,请告诉我。

通常在游戏中,为了避免多个计时器(以及运行计时器的开销/性能影响),将有一个计时器连续运行(只要游戏处于活动状态),被称为GameLoop之类的东西,对象将根据需要注册/注销

顺便说一句,这也提供了一种暂停游戏的简单方法

我相信这有一个很好的理由,但是如果您在AS3中覆盖一个计时器实例,那么前一个计时器将继续无限期运行,无法停止它(因为它的指针将被覆盖)。因此,正如泰勒所说,在覆盖计时器之前,您需要停止任何计时器