2017-02-09 10 views
1

私はすべての方向に移動して撃つプレイヤーを使って簡単な2Dゲームを作っています。Java 2Dゲームの方向を変えて撮影する

私はこれまでのところそれを動作させることができましたが、1つの問題があります。私が撃つときには、私が移動している方向に弾をしたい。これまでのところ私は撃つことができますが、私がプレイヤーの動きの方向を変えると弾丸の方向も変わります。

私は周りを移動しているときに弾丸が方向を変えないようにすることができますか?ここで

は、プレイヤーの動きの抜粋です:

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

関連する問題