2017-02-09 18 views
1

Я делаю простую 2D-игру с игроком, который движется во всех направлениях и стреляет.Java 2D-игра Стрельба в разные стороны

Мне удалось заставить его работать до сих пор, но есть одна проблема. Когда я стреляю, я хочу, чтобы пуля двигалась в направлении, в котором я двигаюсь. Пока я могу стрелять, но когда я изменяю направление движения игрока, меняется направление пуль.

Можете ли вы мне помочь, чтобы я мог сделать так, чтобы пули не меняли направление, когда я двигаюсь?

Вот фрагмент движения игрока:

public static int direction; 

public void keyPressed(KeyEvent k) { 
    int key = k.getKeyCode(); 

    if (key == KeyEvent.VK_RIGHT) { 
     player.setVelX(5); 
     direction = 1; 
    } else if (key == KeyEvent.VK_LEFT) { 
     player.setVelX(-5); 
     direction = 2; 
    } else if (key == KeyEvent.VK_DOWN) { 
     player.setVelY(5); 
     direction = 3; 
    } else if (key == KeyEvent.VK_UP) { 
     player.setVelY(-5); 
     direction = 4; 
    } else if (key == KeyEvent.VK_SPACE) { 
     controller.addFire(new Fire(player.getX(), player.getY(), this)); 
    } 
} 

и класс съемки:

public class Fire { 

    private double x,y; 
    BufferedImage image; 

    public Fire(double x, double y, Game game){ 
     this.x = x; 
     this.y = y; 
    } 
    public void tick(){ 

     switch (Game.direction){ 
      case 1: 
       x += 10; 
       break; 
      case 2: 
       x -= 10; 
       break; 
      case 3: 
       y += 10; 
       break; 
      case 4: 
       y -= 10; 
       break; 
     } 
    } 
    public void render(Graphics graphics){ 
     graphics.drawImage(image, (int)x, (int)y, null); 
    } 
} 

ответ

1

Вместо доступа к Game.direction вы можете создать определенное направление для пули.

new Fire(player.getX(), player.getY(), direction) 

затем

public Fire(double x, double y, int direction){ 
    this.x = x; 
    this.y = y; 
    this.direction = direction; 
} 

public void tick(){ 

    switch (direction){ 
     case 1: 
      x += 10; 
      break; 
     case 2: 
      x -= 10; 
      break; 
     case 3: 
      y += 10; 
      break; 
     case 4: 
      y -= 10; 
      break; 
    } 
} 
+0

Спасибо! Это сработало отлично. Приветствия! –

+0

Я рад это слышать. Примите этот ответ, если я помогу вам. – enucar

3

Я думаю, что вам нужно сделать, это проверить Game.direction в вашей пожарной конструктору, и установите скорость пули (сделайте для нее приватную переменную). Таким образом, если позже изменится Game.direction, это изменение не повлияет на пулю.

+0

Это звучит прямо ко мне. Он использует 'Game.direction' как глобальную переменную, которая ссылается на все отдельные маркеры, но каждая каждая пуля должна« помнить »свою начальную скорость, чтобы она двигалась в последовательном направлении на протяжении всей жизни. – DavidS