0

タイマー関数内に 2 つの if ステートメントがあり、敵の HP が 0 かどうかをチェックします。敵は配列に追加されます。1 つの敵の HP が 0 になると、それらは配列から取り除かれます。配列の長さが 0 の場合、ゲームは次のレベルに進みます。なぜか最初の敵のHPが0になると、他の敵のHPもチェックせずに自動的に次のレベルに進んでしまう。最初のレベルでは敵が 1 人しかいませんでしたが、2 番目のレベルでは敵が 2 人います。次のレベルに進むには、2 番目の敵を倒し、次に最初の敵を倒す必要があります。最初の敵が配列の最初であることに関係があるのではないかと思います。敵が最初に倒された順序を無視するようにコードを変更する方法についてのアイデアはありますか?

public var enemy:Enemy = new Enemy();
public var enemy2:Enemy = new Enemy();
public var enemyArray:Array = [];

レベル タイマー (レベルを設定するタイマー、1 回実行):

    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) {

    }
 }
4

1 に答える 1

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ますか?

いずれにせよ、上記が機能する場合は、楽しいです。そうしないと、何が起こっているのかを知るためにさらにコードが必要になります。

于 2013-11-06T18:17:54.687 に答える