0

こんにちは、弾丸を発射する銃でシステムを作成しています。

update 関数は次のように処理されます。

        var b:Bullet;
        var l:uint = bulletList.length;
        var i:uint;

        for (i = 0; i < l; i++) {
            b = bulletList[i];
            b.sprite.x +=  b.vx;
            b.sprite.y +=  b.vy;

            if (b.sprite.x > 1200 || b.sprite.x < -100 || b.sprite.y < -1000) {
                deleteBullet(b);
                bulletList.splice(i,1);
            }

        }

    public function deleteBullet(b:Bullet) {
        b.sprite = null;
        b = null;
    }

弾丸を撃って端から外れるとエラーが発生し、新しい弾丸が作成されることもありますが、その弾丸にはまったく動きがありません。これは私が得るエラーです:

RangeError: エラー #1125: インデックス 1 は範囲 1 の外にあります。

4

1 に答える 1

1

forループ中に配列をスプライシングしているため、そのエラーが発生しています。

for ループのパラメータとして 'l' を使用する代わりに、 bulletList.length を直接使用してください。これは、すべての反復が CURRENT の長さを調べ、そこから接合されたものをすべて反映するためです。また、スプライシング時にイテレータを減算する必要があります。これにより、将来のすべてのインデックスが 1 つ下にシフトします。

       for (i = 0; i < bulletList.length; i++) {
            b = bulletList[i];
            b.sprite.x +=  b.vx;
            b.sprite.y +=  b.vy;

            if (b.sprite.x > 1200 || b.sprite.x < -100 || b.sprite.y < -1000) {
                deleteBullet(b);
                bulletList.splice(i,1);
                i--;
            }

        }
于 2012-08-15T21:23:26.423 に答える