0

問題は、敵を撃墜すると、敵が再スポーンし続けることです。おそらく私が見落としているもの。

撮影できます。ステージから削除されますが、配列にまだ存在するため再レンダリングされます。

ありがとう

private function enemySpawnen():void
    {           
        for(var i:uint = 0; i < hoeveelheidEnemy;i++){
            var enemyShip:SpaceShip = new SpaceShip();
            Enemy[i] = enemyShip;
        }
    }

private function renderEnemy(e:Event):void
    {           
        for(var i:uint = 0; i < hoeveelheidEnemy;i++){              
            if(Enemy[i] != null){
                viewContainer.addChild(Enemy[i]);

                Enemy[i].scaleX = 0.5;
                Enemy[i].scaleY = 0.5;

                Enemy[i].x = 500;
                Enemy[i].y = 400 - i*100;
        }
        }
    }

function shoot(e:Event):void
            {
                kogel.x +=10;

                try{
                    for(var i:uint = 0; i < hoeveelheidEnemy;i++){
                        if(kogel.hitTestObject(Enemy[i])){

                            Enemy.splice(i,0);==>problem when i set it to 1 or i then nothing happens
                            viewContainer.removeChild(Enemy[i]);
                            //trace("hit");
                        }
                    }
                }
                catch(e:Error){

                }
            }

私のソース コードはここにあります: http://dl.dropbox.com/u/50815831/Nieuwe%20map.zip

4

1 に答える 1

1

配列をスプライスする前に、子を削除する必要があります。インデックスがループの途中で変更されないように、後方に反復する必要もあります。

for ループを次のように変更してみてください。

for(var i:uint = Enemy.length-1; i >= 0;i--){
    if(kogel.hitTestObject(Enemy[i])){
        viewContainer.removeChild(Enemy[i]);
        Enemy.splice(i,1); //do this after the above line, otherwise you're actually removing doing removeChild on the next item in the array
        kogel.removeEventListener(Event.ENTER_FRAME, shoot); //stop the frame handler
        break; //abandon the rest of this loop
    }
}

が弾丸で、1 人の敵だけに影響を与えたい場合Kogelは、何かを破壊したらループから抜け出す必要があります。

良い練習のヒントとして。シュート関数/フレーム ハンドラーを Kogel クラスにカプセル化し、敵の配列を渡すだけです。

私が気付いた他の何か、あなたのrenderEnemy関数はフレームごとに実行されますが、これは完全に不必要であり、望ましくない位置付けを引き起こしています。その関数をまとめて削除し、コードを enemySpawned() メソッドに挿入します。

private function enemySpawnen():void
    {
        for(var i:uint = 0; i < hoeveelheidEnemy;i++){
            var enemyShip:SpaceShip = new SpaceShip();
            Enemy[i] = enemyShip;
            viewContainer.addChild(Enemy[i]);

                Enemy[i].scaleX = 0.5;
                Enemy[i].scaleY = 0.5;

                Enemy[i].x = 500;
                Enemy[i].y = 400 - i*100;
        }
    }
于 2012-11-09T21:16:01.220 に答える