AS3:矢量项未拼接

时间:2012-08-15 21:15:52

标签: actionscript-3 actionscript flash-cs6

您好我正在创建一个用枪射击子弹的系统。

更新功能以这种方式处理:

        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。

1 个答案:

答案 0 :(得分:1)

您收到该错误是因为您在for循环中拼接了数组。

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

       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--;
            }

        }