0

私が抱えている問題は、プレイヤーがシールドで敵と衝突したときに、敵だけを破壊する必要があることです。代わりに、アレイ内のすべての敵を削除します。敵を除去するために呼び出される関数は別の場所で使用され、正しく機能します。

これは衝突チェック関数です:

function collisionCheck(){
enemyLoop :for(var i:int = level.enemies.length-1; i>=0; i--){
if(!shield){
        removeEnemy(i, true);
        removePlayer();
        return;
    }
    else{
        removeEnemy(i, false); //This is what is called when I get this issue
        return;
    }
}

敵の除去機能:

public function removeEnemy(enemyNum:int, playerDown:Boolean){
if(!playerDown){
    killsMade++;
    if(level.levelObjects.contains(level.enemies[enemyNum].healthBar)){
        level.levelObjects.removeChild(level.enemies[enemyNum].healthBar);
    }
    level.enemies[enemyNum].enemyHit(true);
    level.enemies[enemyNum].gotoAndPlay("Explosion");
    explodedEnemyNum = enemyNum;
    playExplosionSound();
    explosionDone();
}

敵スプライトを消す機能です

public function explosionDone(e:TimerEvent){
    stopExplosionSound();
    if(level.enemies[explodedEnemyNum] != null){
    level.levelObjects.removeChild(level.enemies[explodedEnemyNum]);
        level.enemies.splice(explodedEnemyNum, 1);
    }
}

ご協力ありがとうございます。他に何か必要なことがありましたらお知らせください。

4

1 に答える 1

0

この問題は修正されました。問題は、衝突チェックと爆発完了機能にありました。敵は爆発アニメーションの後にのみ削除されたので、衝突のループに入ります。removeEnemy 関数で敵をすぐに削除することでそれを修正しました。

于 2012-08-20T20:45:18.143 に答える