数组顺序麻烦

时间:2013-11-06 17:49:58

标签: arrays actionscript-3 if-statement flash-cs5

我在计时器功能中有几个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) {

    }
 }

1 个答案:

答案 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

无论如何,如果以上工作,乐趣;否则,我们需要更多代码才能知道发生了什么。