Javascript HTML5 JS-我如何使我的子弹/子弹朝着一个恒定的方向运动?

Javascript HTML5 JS-我如何使我的子弹/子弹朝着一个恒定的方向运动?,javascript,html,dreamweaver,Javascript,Html,Dreamweaver,我已经和子弹代码斗争了一段时间了。我知道很可能有一个更简单的解决方案(事实上我记得以前做过类似的事情,但我就是记不起来了)。但无论如何 问题:我的子弹应该向四个方向发射。然而,如果我选择在发射后移动,在不同的方向,子弹的方向和位置也会改变 例如,如果我面朝上发射3发子弹,然后向右移动,子弹将随我改变方向和速度,相反,我希望它在我朝不同方向移动时继续朝该方向移动 这是子弹的代码 function Bullet(w, h, s){ this.x = tank.x;

我已经和子弹代码斗争了一段时间了。我知道很可能有一个更简单的解决方案(事实上我记得以前做过类似的事情,但我就是记不起来了)。但无论如何

问题:我的子弹应该向四个方向发射。然而,如果我选择在发射后移动,在不同的方向,子弹的方向和位置也会改变

例如,如果我面朝上发射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];

                    }               
            }                   
        }           
    }   
功能项目符号(w、h、s){
这个.x=油箱.x;
this.y=tank.y
这个宽度=w;
这个高度=h;
这个速度=s;
}
//设定射击间隔
函数setFire(){
tankCanFire=真;
}
//创建一个新项目符号
函数fireball(){
如果(坦克失火){
tankCanFire=假;
子弹。推(新子弹(5,10,15));
ctx.fillText(“叮”,300300);
}
}
//画出子弹+速度。
函数drawBullet(){
ctx.fillText(“长度=”+bullets.length,200200);
如果(项目符号长度>0){
for(变量输入项目符号)
{
ctx.fillText(“DONG”,200250);
如果(tank.up==真)
{               
ctx.drawImage(bulletImage,项目符号[key].x+13,项目符号[key].y-8);
项目符号[key].y-=15;
if(项目符号[key].y<0)
删除项目符号[键];
}
否则如果(油箱下降==真)
{               
ctx.drawImage(bulletImage,项目符号[key].x+13,项目符号[key].y+40);
项目符号[key].y+=15;
如果(项目符号[key].y>400)
删除项目符号[键];
}
else if(tank.left==真)
{               
ctx.drawImage(bulletImage,项目符号[key].x-8,项目符号[key].y+13);
项目符号[key].x-=15;
如果(项目符号[key].x<0)
删除项目符号[键];
}
else if(tank.right==真)
{               
ctx.drawImage(bulletImage,项目符号[key].x+40,项目符号[key].y+13);
项目符号[key].x+=15;
如果(项目符号[key].x>600)
删除项目符号[键];
}               
}                   
}           
}   

在Bullet中,除了x、y、宽度、高度和速度外,还需要存储此特定Bullet的行进方向。当前代码将在移动子弹时查看坦克的方向,因此,如果转动坦克,子弹的方向将改变。这也很有趣,但是如果你想要传统的子弹,在子弹中储存它的方向是有意义的

最简单的方法是存储速度,而不是速度。大概是这样的:

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;
}