根据玩家面对的方式改变子弹方向

Changing bullet direction based on the way player is facing

我做了一点 platformer.I 可以让玩家向右射击,但是当我试图让它向玩家所在的方向射击时 "facing",转向另一个方向,子弹也改变了方向,这是我的 Fiddle

if(keys[13] &&Date.now()-lastFire>100){

    bullets.push({
        x:player.x,
        y:player.y,
        });

    lastFire = Date.now();
}
for (var i=0;i<bullets.length;i++){

    ctx.beginPath();
    ctx.arc(bullets[i].x,bullets[i].y,2,0,Math.PI*2);
    ctx.fill();
    if(facingRight & !facingLeft ){
        bullets[i].x+=10;
    }
    else if(!facingRight & facingLeft ){
        bullets[i].x-=10;
    }


}

您正在根据玩家面向的方向更新所有子弹的位置。如果要保留每颗子弹的前进方向,则必须为每颗子弹存储它。

创建项目符号时存储位置变化(dx):

bullets.push({
  x: player.x,
  y: player.y,
  dx: facingLeft ? -10 : 10
})

使用以下方法绘制和更新所有项目符号:

bullets.forEach(function (bullet) {
  ctx.beginPath();
  cts.arc(bullet.x, bullet.y, 2, 0, Math.PI*2);
  ctx.fill();
  bullet.x += bullet.dx
})

注意:您正在使用 &,位运算符而不是您可能想使用的 &&

注意 2:您可能应该将玩家面对的方向存储在一个变量中:

var LEFT = 1
var RIGHT = 2
var playerFacing = LEFT