您好我正在创建一个用枪射击子弹的系统。
更新功能以这种方式处理:
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。
答案 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--;
}
}