У вас есть проблема в вашем цикле.Вы шагаете по индексам в массиве, но также изменяете массив по ходу, так что вы можете получить запутанные результаты.Это может или не может быть причиной ваших других проблем (очевидно, это не весь ваш код), однако исправление может помочь.
Есть несколько способов исправить это.Мой обычный метод состоит в том, чтобы считать в обратном порядке через массив, чтобы удаление элементов не влияло на местоположения индексов, которые еще предстоит посетить в цикле.
function collisionDetection() {
//because this loop is continued once the array is modified, count from the end
for (var enemy = fiende.length-1; enemy >=0 ; enemy--) {
//this loop exits when a clash is found, so count as normal
for (var missile = 0; missile < missiles.length; missile++) {
if (
missiles[missile].left >= fiende[enemy].left &&
missiles[missile].left <= (fiende[enemy].left + 50) &&
missiles[missile].top <= (fiende[enemy].top + 50) &&
missiles[missile].top >= fiende[enemy].top
) {
fiende.splice(enemy, 1);
missiles.splice(missile, 1);
//the enemy has already been hit, exit and dont consider other missiles
break;
}
}
}
}
Я сделал здесь предположение, что одна ракета пропалаза врага.Если вы хотите уничтожить более одной ракеты, удалите разрыв, а также посчитайте в обратном направлении во внутреннем цикле.
Спасибо за предоставленную ссылку на ваш код git (см. Комментарии ниже).
Выше приведена ошибка в коде, но не та, которая обычно вызывает какие-либо проблемы.Кажется, проблема в том, что когда враги оживляются, пули не попадают в них.Проблема здесь в том, что вы обнаруживаете столкновения с помощью своего js-кода с точки зрения местоположения врага, но вы улучшаете анимацию с помощью CSS-анимации.Если вы хотите обнаружить столкновения, вам нужно полностью анимировать в JS.
Попробуйте удалить анимацию css, чтобы убедиться, что вы можете поразить врагов.Тогда, если это сработает, вам нужно выполнить все движения в js.