HTML5 JS - Как мне заставить мои пули / выстрелы двигаться в постоянном направлении?

0

Некоторое время я боролся с кодом пули. Я знаю, что, скорее всего, это более простое решение (на самом деле я вспоминаю нечто подобное, что я делал раньше, но я просто не могу его запомнить). Но в любом случае;

ПРОБЛЕМА: Мои пули стреляют по всем 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];

                    }               
            }                   
        }           
    }   
Теги:
dreamweaver

1 ответ

0

В Bullet, в дополнение к 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;
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню