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"?