用子弹击中使敌人死亡

时间:2017-01-20 14:20:48

标签: javascript

我正在制作一个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]。我已经被困在这两天了,并搜索了我能找到的所有东西,但没有找到任何有用的东西。我将不胜感激任何帮助... 提前谢谢!

1 个答案:

答案 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);
        }  
    }
}

注意:在这个例子中,我以相反的顺序循环敌人,以避免在拼接时错过一个敌人。