我正在制作一个javascript游戏,当用子弹击中时我无法让敌人死亡。以下是我无法理解的代码部分:
for(var i=0;i<enemies.length;i++){
ctx.fillRect(enemies[i].x,enemies[i].y,30,100);
if(player.x+player.width>enemies[i].x && player.x<enemies[i].x+30 && player.y+player.height>enemies[i].y && player.y<enemies[i].y+100){
document.location.reload();
}
}
for (var b=0;b<bullets.length;b++){
ctx.beginPath();
ctx.arc(bullets[b].x,bullets[b].y,2,0,Math.PI*2);
ctx.fill();
bullets[b].x += bullets[b].dx;
if(bullets[b].x>enemies[i].x && bullets[b].x<enemies[i].x+enemies[i].width && bullets[b].y>enemies[i].y && bullets[b].y<enemies[i].y+enemies[i].height){
enemies.splice(i,1);
}
}
所以,我知道问题在于它无法读取敌人[i]的属性“x”,因为我没有把它放在敌人的循环中,但是如果我把它放在那里那么它可以' t读取子弹的属性“x”[b]。我已经被困在这两天了,并搜索了我能找到的所有东西,但没有找到任何有用的东西。我将不胜感激任何帮助... 提前谢谢!
答案 0 :(得分:1)
你想要的是检查每个子弹的所有敌人。
这是使用嵌套循环:
完成的for (var b=0;b<bullets.length;b++){
ctx.beginPath();
ctx.arc(bullets[b].x,bullets[b].y,2,0,Math.PI*2);
ctx.fill();
bullets[b].x += bullets[b].dx;
for (var j=ennemies.length; j-- >0;) {
if(bullets[b].x>enemies[j].x && bullets[b].x<enemies[j].x+enemies[j].width && bullets[b].y>enemies[j].y && bullets[b].y<enemies[j].y+enemies[j].height){
enemies.splice(j,1);
}
}
}
注意:在这个例子中,我以相反的顺序循环敌人,以避免在拼接时错过一个敌人。