根据玩家面对的方式改变子弹方向
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
我做了一点 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