Итак, я делаю эту маленькую шутерскую игру с javascript, и я столкнулся с проблемой, которую я не могу понять.Цикл проверки на столкновение прекращает цикл после появления врага
У меня есть проверка столкновения, которая проверяет, сталкивается ли какой-либо живой враг с игроком или пулей, используя цикл for. Петля отлично работает, пока я не создаю врага.
В начале цикла for вы можете видеть console.log
, он регистрирует числа только до первого живого врага index
. Например, если enemies[4]
жив и нет других врагов с index
до того, как они будут живы, он будет вести журнал 0, 1, 2, 3
и 4
. Если бы я тогда убить всех врагов, петля работает полный 50 раз снова (что длина массива) до вражеского нерестится
checkCollision: function(){
function calculate(enemy, other){
var r = enemy.r + other.r;
var dx = enemy.posX - other.posX;
var dy = enemy.posY - other.posY;
var d = Math.sqrt((dx * dx) + (dy * dy));
if(r > d){
enemy.alive = false;
other.alive = false;
return true;
}
return false;
}
for (var i = 0, max = this.enemies.length; i < max; i++) {
console.log(i);
if(this.enemies[i].alive){
if(calculate(this.enemies[i], this.player)){
continue;
}
for (var i = 0, max = this.player.weapon.bullets.length; i < max; i++){
if(this.player.weapon.bullets[i].alive){
if(calculate(this.enemies[i], this.player.weapon.bullets[i])){
break;
}
}
}
}
}
}
Вот небольшая визуализация:.
[0] = !alive
[1] = alive
[2] = !alive
[3] = alive
[4] = alive
Теперь цикл for будет работать только 2 раза, поэтому не проверять столкновение на 3 и 4, что я и хочу.
Не могли бы вы объяснить, как вы порождаете врага и объясняете больше ошибку? Я даже не уверен, есть ли непреднамеренное поведение или сообщение об ошибке ... –
Существует таймер, и когда он достигает предела скорости появления, вызывается функция порождения, которая устанавливает для живого-булева первого живого врага значение true и игра продолжает обновлять этого врага. Я хочу, чтобы проверка совпадения проверяла конфликт между всеми живыми объектами, но это не связано с этой ошибкой. Консоль не говорит никаких ошибок. – iWillBeMaster