1

配列の順序をリセット/リロード/再構築できるかどうか疑問に思っていますか?

私はこの「スペースインベーダー」ゲームを作っています。ゲームを再開するときに、敵はその位置に再開する必要があります。敵を撃墜してゲームをリセットすると、殺した敵は消え続けます。

したがって、ここに責任のあるコードのいくつかがあります:

var spiderArray:Array = new Array(enemyField.enemy1,enemyField.enemy2,
                             enemyField.enemy3,enemyField.enemy4,
                             enemyField.enemy5,enemyField.enemy6,
                             enemyField.enemy7,enemyField.enemy8,
                             enemyField.enemy9,enemyField.enemy10,
                             enemyField.enemy11,enemyField.enemy12,
                             enemyField.enemy13,enemyField.enemy14,
                             enemyField.enemy15,enemyField.enemy16,
                             enemyField.enemy17,enemyField.enemy18,
                             enemyField.enemy19,enemyField.enemy20,
                             enemyField.enemy21,enemyField.enemy22,
                             enemyField.enemy23,enemyField.enemy24,
                             enemyField.enemy25,enemyField.enemy26,
                             enemyField.enemy27,enemyField.enemy28,
                             enemyField.enemy29,enemyField.enemy30,
                             enemyField.enemy31,enemyField.enemy32,
                             enemyField.enemy33,enemyField.enemy34,
                             enemyField.enemy35,enemyField.enemy36,
                             enemyField.enemy37,enemyField.enemy38,
                             enemyField.enemy39,enemyField.enemy40,
                             enemyField.enemy41,enemyField.enemy42,
                             enemyField.enemy43,enemyField.enemy44,
                             enemyField.enemy45,enemyField.enemy46,
                             enemyField.enemy47,enemyField.enemy48,
                             enemyField.enemy49,enemyField.enemy50,
                             enemyField.enemy51,enemyField.enemy52,
                             enemyField.enemy53,enemyField.enemy54,
                             enemyField.enemy55,enemyField.enemy56,
                             enemyField.enemy57,enemyField.enemy58,
                             enemyField.enemy59,enemyField.enemy60,
                             enemyField.enemy61,enemyField.enemy62,
                             enemyField.enemy63,enemyField.enemy64,
                             enemyField.enemy65,enemyField.enemy66);

今、敵が殺されている場所:

function enemyHitTest():void {
//for each of the three spiders
for(var i:int = 0; i < spiderArray.length; i++) {
    //the each of the six bullets
    for(var j:int = 0; j < 6; j++) {
        //don't consider bullets that aren't in play:
        if(bulletArray[j].y > SpelerMC.y) continue;
        if(spiderArray[i].hitTestObject(bulletArray[j])) {
            score += 10;
            scoreTxt.text = score.toString();
            trace("Invader " + i + " neergeschoten!");
            spiderArray[i].parent.removeChild(spiderArray[i]);
            bulletArray[j].x = j * 70 + 100;
            bulletArray[j].y = 595;
        }
    }
}

今、私はある種のtheArray.pop();何かを置く必要があると思います、しかしそれを使う方法がわかりません、しかし私はそれをこの関数に置く必要があります:

function startGame() {
trace("Start het spel opnieuw...");
gameTimer.addEventListener(TimerEvent.TIMER, onTick);
gameTimer.start();
enemyField.x = 400;
enemyField.y = 160;
SpelerMC.x = 83;
SpelerMC.y = 531;
}

私を助けてください!すでに5時間探しています。
前もって感謝します!

4

2 に答える 2

0

i要素番号の使用を削除するにはarray.splice(i, 1);http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/Array.html#splice().com/en_US/FlashPlatform/reference/actionscript/3/Array.html# splice%28%29)ただし 、配列をリセットするarray.lengthと減少することに注意してください。もう一度呼び出すだけです。
spidersArray = new Array(enemyField.enemy1, etc)

関数内のUPDATE
で、削除条件をに変更し 、追加しましたenemyHitTestif(enemyArray[i].visible && enemyArray[i].hitTestObject(laserArray[j]))enemyArray[i].parent.removeChild(enemyArray[i]);enemyArray[i].visible = false;

function respawnEnemies():void{
    for(var i:int = 0; i < enemyArray.length; i++) {
        enemyArray[i].visible = true;
    }
}

からそれを呼び出すためにstartGame

ここに完全なコード

upd 2
なので、問題は配列のリセットではなく、enemyFieldとその敵が手動でステージに追加され、プログラムで削除されたため、それらを戻すために呼び出すコードがありませんでした。

于 2012-10-13T23:44:29.640 に答える
0

すべてのインスタンスを保持する必要がある場合-たとえば、最初にすべてのアクターを生成し、後ですべてを再利用する場合(新しいゲームで)、それらの配列を設定し、ゲームの開始ごとにコピーを作成して「死んだ」敵を削除できますコピーされた配列から

また、より良いオプションは、ベクトルを使用することです。

var enemies:Vector.<Enemy> = Vector.<Enemy>([]);//in brackets references to the instances of Enemy class
var inGame:Vector.<Enemy> = enemies.concat();

また、5時間の研究?辛抱強く頑張ってください、

よろしくお願いします

于 2012-10-14T20:28:15.233 に答える