我一直在努力使用子弹代码。我知道最有可能是一个更简单的解决方案(实际上我记得以前我做过类似的事情,但我记不住了)。但无论如何;
问题:我的子弹应该向所有4个方向射击。但是如果我选择在射击后移动,在不同的方向上,子弹的方向和位置也会发生变化。
例如,如果我面朝上并发射3发子弹,然后向右移动,子弹将随我改变方向和速度,而我希望它继续朝那个方向行进,因为我向不同的方向移动。
这是子弹的代码;
function Bullet(w, h, s){
this.x = tank.x;
this.y = tank.y
this.width = w;
this.height = h;
this.speed = s;
}
//setInterval of firing
function setFire(){
tankCanFire = true;
}
//Create a new bullet
function fireBullet(){
if(tankCanFire){
tankCanFire = false;
bullets.push(new Bullet(5, 10, 15));
ctx.fillText("Ding", 300, 300);
}
}
//DRAW the Bullets + velocities.
function drawBullet(){
ctx.fillText("length = " +bullets.length, 200, 200);
if (bullets.length > 0){
for (var key in bullets)
{
ctx.fillText("DONG", 200, 250);
if (tank.up == true)
{
ctx.drawImage(bulletImage, bullets[key].x + 13, bullets[key].y - 8);
bullets[key].y -= 15;
if (bullets[key].y < 0)
delete bullets[key];
}
else if (tank.down == true)
{
ctx.drawImage(bulletImage, bullets[key].x + 13, bullets[key].y + 40);
bullets[key].y += 15;
if (bullets[key].y > 400)
delete bullets[key];
}
else if (tank.left == true)
{
ctx.drawImage(bulletImage, bullets[key].x - 8, bullets[key].y + 13);
bullets[key].x -= 15;
if (bullets[key].x < 0)
delete bullets[key];
}
else if (tank.right == true)
{
ctx.drawImage(bulletImage, bullets[key].x + 40, bullets[key].y + 13);
bullets[key].x += 15;
if (bullets[key].x > 600)
delete bullets[key];
}
}
}
}
答案 0 :(得分:0)
在子弹中,除了x,y,宽度,高度,速度之外,您还需要存储此特定子弹的方向。当前代码将在移动子弹时查看坦克的方向,因此如果您转动坦克,子弹的方向将会改变。这也很有趣,但是如果你想要传统的子弹,那么在子弹中存储它的方向是有意义的。
最简单的方法是存储速度,而不是速度。像这样:
function Bullet(w, h, dx, dy){
this.x = tank.x;
this.y = tank.y
this.width = w;
this.height = h;
this.dx = dx; // how much x changes at every time step
this.dy = dy;
}