HTML5 JS - 如何使我的子弹/镜头朝着不变的方向发展?

时间:2013-11-30 00:44:07

标签: javascript html html5 dreamweaver

我一直在努力使用子弹代码。我知道最有可能是一个更简单的解决方案(实际上我记得以前我做过类似的事情,但我记不住了)。但无论如何;

问题:我的子弹应该向所有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];

                    }               
            }                   
        }           
    }   

1 个答案:

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