Я создаю игру, которая случайно отображает круги на холст. Объекты окружения добавляются в массив, и всякий раз, когда игрок сталкивается с одним из них, я хочу удалить этот объект. Вот мой код в настоящее время для столкновения -
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();