0

さて、メインクラスに次のような配列があります。

objectArray:Array = [ ];

コイン、敵、ハートなど、さまざまなアイテムを作成する3つの関数があります。これらの追加されたアイテムはそれぞれにプッシュされますobjectArray。これらのオブジェクトのいずれかに対して弾丸をヒットテストするこの関数を作成しようとしています。

private function checkCollisions() :void{
    var bullet:MovieClip;
    for (var j:int = 0; j < objectArray.length; j++){
        object = objectArray[j];
        for(var i:int = 0; i < bulletArray.length; i++){
            bullet = bulletArray[i];
            if (objectArray[j].hitTestPoint(bullet.x, bullet.y, true)) {
                container.removeChild(bullet);
                bulletArray.splice(i,1);

                if (objectArray[j] == Enemy[j]){
                    container.removeChild(objectArray[j]);
                    objectArray.splice(j,1);
                    trace("enemy hit");
                }
            }
        }
    }
}

問題はこの部分から来ています:

if (objectArray[j] == Enemy[j]){  \\problem
    container.removeChild(objectArray[j]);
    objectArray.splice(j,1);
    trace("enemy hit");
}

ヒットテストされているオブジェクトを「敵」などの特定の値に対してテストする方法を模索し続け、どの種類のオブジェクトがヒットされているかに基づいて異なる結果を生成できるようにします。どんなテストの組み合わせを試しても、反応しないようです。トレースすると、結果としてobjectArray[j]生成されます。[object Enemy]配列値をテストする別の方法はありますか?

4

1 に答える 1

2

objectArray[j]のオブジェクトがオブジェクトであるかどうかをテストしたいようですEnemyisこれは、演算子を使用して行うことができます。

if (objectArray[j] is Enemy)
{
    container.removeChild(objectArray[j]);
    trace ("enemy hit");
}

編集

また、弾丸/オブジェクト配列を逆の順序で反復することもできます。これは、配列を反復処理するときに配列からエントリが削除される可能性があるためです。

for (var j:int = objectArray.length -1; j >= 0; j--){
 // then do the same with the bullet array
于 2012-08-02T22:10:01.557 に答える