Javascript拼接更改数组中的较早值
我正在创建一个随机在画布上显示圆圈的游戏。 圆对象被添加到一个数组,每当玩家与其中一个碰撞,我想删除该对象。 这是我的代码目前的碰撞 -
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);
}
}
当玩家击中已添加到数组/画布的最后一个圆时,此代码可以正常工作。 但是,如果玩家击中数组中间的圆圈,则数组中的所有子数据项也将被删除(而不是前一个)。 无论多少圈被删除,球员得分都会增加。 这表明,当其中一个圆圈被移除时,这些项目向下移动并取代刚刚删除的项目,包括取其位置坐标,然后玩家与所有人碰撞,然后全部删除。
我不知道如何解决这个问题,或者如果我错误地使用拼接。
这是我的代码添加到数组 -
function createItem(){
item1 = new itemSmall();
item1.x = Math.floor(Math.random()*((currentGame.windowWidth - 40)-40+1)+40);
item1.y = Math.floor(Math.random()*((currentGame.windowHeight - 40)-40+1)+40);
item1.fillStyle = "rgb(200,80,200)";
item1.lineWidth = 4; //Stroke Thickness
item1.strokeStyle = "rgb(255,215,0)";
currentGame.items.push(item1);
}
项目存储在这里(为了清晰起见,我从该对象中删除了其他所有内容) -
function gameValues(){
this.items = [];
}
currentGame = new gameValues();
修改正在循环的数组时遇到麻烦很常见。
例如,如果你移动位置i
的物品,那么后面的物品会左移,所以下一个物品现在坐在位置i
,但是因为你的循环的下一次迭代检查i+1
,该物品将被跳过!
现在你可以做我了i--;
在拼接之后,确保您在下一次迭代中检查位置i
上的新项目,但更简单的解决方案是简单地向后循环。 那么影响列表其余部分的操作将不成问题。
for(var i = currentGame.items.length; i--; )
无论如何,我担心代码中的其他内容:
position = currentGame.items.indexOf(i);
我们不知道当前项目的位置是i
吗? 此indexOf
在列表中搜索具有值i
的项目。 我想如果indexOf
搜索失败, position
会得到-1
。 我认为你在这里的意思是:
var position = i;
最后,如果你不喜欢console.log
你可以尝试把它放在你的if块中:
debugger;
手动在你的代码中设置一个断点,所以你可以检查变量的值,看看发生了什么问题。 您需要打开浏览器的调试器或“开发工具”面板。 当您完成时,不要忘记删除声明!
链接地址: http://www.djcxy.com/p/1877.html上一篇: Javascript splice changing earlier values in an array
下一篇: comprehensions and functional functions faster than "for loops"?