我在计时器功能中有几个if语句,检查敌人的hp是否为0.敌人被添加到一个数组中。当一个敌人hp命中0时,他们将被从阵列中取出并被移除。当数组长度为0时,游戏进入下一个级别。出于某种原因,当第一个敌人的hp达到0时,它会自动进入下一个等级,甚至没有检查另一个敌人的hp。它在第一级工作,我只有1个敌人,但在第二级,我有两个敌人。我必须打败第二个敌人,然后是第一个,以便它进入下一个级别。我认为它可能与第一个敌人是阵列中的第一个敌人有关。关于我如何改变代码以使其忽略敌人被击败的顺序的任何想法?
public var enemy:Enemy = new Enemy();
public var enemy2:Enemy = new Enemy();
public var enemyArray:Array = [];
电平定时器(设置电平的定时器,运行一次):
if (level.levelNumber == 1)
{
enemyArray.push(enemy);
addChild(player);
addChild(enemy)
enemy.enemyMoveTimer.start();
enemy.enemyAttackTimer.start();
onGameTimer.start();
}
if (level.levelNumber == 2)
{
enemyArray.push(enemy, enemy2);
addChild(player);
addChild(enemy)
addChild(enemy2)
enemy.enemyMoveTimer.start();
enemy.enemyAttackTimer.start();
enemy2.enemyMoveTimer.start();
enemy2.enemyAttackTimer.start();
onGameTimer.start();
}
游戏计时器(检查敌人生命的计时器,继续运行):
if (enemyArray.length == 0)
{
trace("NEXT LEVEL");
removeChild(player);//remove player from the current level
onLevelTimer.removeEventListener(TimerEvent.TIMER, timerLevel);
levelNumber += 1;
onLevelTimer.addEventListener(TimerEvent.TIMER, timerLevel);
onGameTimer.stop();
}
if (enemy.enemyHP <= 0)
{
enemy.enemyHP = 0;
enemy.enemyMoveTimer.stop();
enemy.enemyAttackTimer.stop();
trace("DEAD");
enemyArray.splice(0,1);
try
{
removeChild(enemy)
}
catch (e:ArgumentError){
}
}
if (enemy2.enemyHP <= 0)
{
enemy2.enemyHP = 0;
enemy2.enemyMoveTimer.stop();
enemy2.enemyAttackTimer.stop();
trace("DEAD");
enemyArray.splice(1,1);
try
{
removeChild(enemy2)
}
catch (e:ArgumentError) {
}
}
答案 0 :(得分:1)
那里有更多的代码可能是问题的原因,所以我只是假设它看起来像我在下面写的那样。它还省去了多个if statements
,有利于简单地迭代enemyArray
,根据需要检查每个(看看循环的力量!)。
var enemyMoveTimer:Timer = new Timer(1000, 0);
enemyMoveTimer.addEventListener(TimerEvent.TIMER, enemyTimerListener);
enemyMoveTimer.start();
var enemyArray:Array = [new Enemy("enemy1"), new Enemy("enemy2")];
function enemyTimerListener(e:Event):void {
for (var i:String in enemyArray) {
var enemy:Enemy = enemyArray[int(i)];
if (enemy.enemyHP <= 0) {
enemy.enemyMoveTimer.stop();
enemy.enemyAttackTimer.stop();
trace("DEAD");
enemyArray.splice(int(i),1);
if (enemy.parent != null) {
removeChild(enemy);
}
}
}
}
未显示的是您如何检测并进入“下一级别”。如何将这些敌人添加到阵列中?既然您已经推出了自己的Enemy
课程,那该课程的样子是什么样的?你为什么使用try ... catch
?
无论如何,如果以上工作,乐趣;否则,我们需要更多代码才能知道发生了什么。