更改数组中早期值的Javascript
我正在创建一个在画布上随机显示圆圈的游戏。圆圈对象被添加到一个数组中,每当玩家与其中一个对象发生碰撞时,我都希望移除该对象。这是我目前处理冲突的代码-更改数组中早期值的Javascript,javascript,arrays,splice,Javascript,Arrays,Splice,我正在创建一个在画布上随机显示圆圈的游戏。圆圈对象被添加到一个数组中,每当玩家与其中一个对象发生碰撞时,我都希望移除该对象。这是我目前处理冲突的代码- for(var i = 0; i < currentGame.items.length; i++) { if (player1.x < currentGame.items[i].x + currentGame.items[i].radius*2 && player1.x + curre
for(var i = 0; i < currentGame.items.length; i++)
{
if (player1.x < currentGame.items[i].x + currentGame.items[i].radius*2 && player1.x + currentGame.items[i].radius*2 > currentGame.items[i].x &&
player1.y < currentGame.items[i].y + currentGame.items[i].radius*2 && player1.y + player1.car.height > currentGame.items[i].y) {
currentGame.score++;
position = currentGame.items.indexOf(i);
currentGame.items.splice(position, 1);
}
}
项目存储在此处(为了清晰起见,我删除了此对象中的所有其他内容)——
修改正在循环的数组时,遇到问题是很常见的 例如,如果在位置
i
处删除项目,则后面的项目将向左移动,因此下一个项目现在将位于位置i
,但由于循环的下一次迭代检查i+1
,因此该项目将被跳过
现在你可以做i--
拼接后,确保在下一次迭代中检查位置i
中的新项目,但更简单的解决方案是简单地向后循环。那么,影响列表其余部分的操作将不会成为问题
for(var i = currentGame.items.length; i--; )
无论如何,我关心的是您代码中的其他内容:
position = currentGame.items.indexOf(i);
我们是否已经知道当前项目的位置是i
?此indexOf
在列表中搜索值为i
的项。我想当索引of
搜索失败时,position
将获得值-1
。我想你真正的意思是:
var position = i;
最后,如果您不喜欢console.log
,可以尝试将其放入if块中:
debugger;
这将在代码中手动设置断点,以便您可以检查变量的值以查看出现了什么问题。您需要打开浏览器的调试器或“开发工具”面板。完成后不要忘记删除该语句 在循环时记录对象,您将看到为什么,现在一切都有意义了,谢谢!这就解决了问题,对于其他一些非联邦代码,您也是正确的。
var position = i;
debugger;