所以我一直在使用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的碰撞,這就是我想要的。
你能解釋一下你如何產生一個敵人,並解釋更多的錯誤?我甚至不確定是否有意外的行爲或錯誤信息... –
有一個計時器,當它達到產卵率限制時,會調用一個產卵函數,它將第一個非活着的敵人的alive-boolean設置爲true,遊戲繼續更新那個敵人。我希望collsion檢查所有活着的對象之間的碰撞,但它不是由於這個錯誤。控制檯不說任何錯誤。 – iWillBeMaster