0

您好,我正在创建一个带有发射子弹的枪的系统。

更新函数是这样处理的:

        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 循环中拼接数组。

而不是使用'l'作为for循环的参数,而是直接使用bulletList.length作为每次迭代它会查看当前长度,这将反映任何拼接出来的东西。拼接时还需要减去迭代器,因为这会将所有未来的索引向下移动一个。

       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 回答