2017-03-19 3 views
2

私は2Dタンクゲームに取り組んでいます。 2つの矢印キーを同時に(上や右のように)押すと、タンクは前に進み、同時に右に回転する必要があります。しかし、私が1つのキーを離したとき(例えば、私は上と右を同時に押してから右に離しますが、押し続けると、理論上はタンクは回転を止めて前進します)、タンクは直接停止します。どうして?

マイコード:javafxで複数のキー入力が検出されない場合があります

getScene().setOnKeyPressed(new EventHandler<KeyEvent>() { 
     @Override 
     public void handle(KeyEvent event) { 
      onKeyPressed(event); 
      move(); 
     } 
    }); 
    getScene().setOnKeyReleased(new EventHandler<KeyEvent>(){ 
     @Override 
     public void handle(KeyEvent event){ 
      onKeyReleased(event); 
     } 
    }); 

public void onKeyPressed(KeyEvent event){ 
    switch (event.getCode()){ 
     case LEFT: 
      isPressLeft=true; 
      break; 
     case RIGHT: 
      isPressRight=true; 
      break; 
     case UP: 
      isPressUp=true; 
      break; 
     case DOWN: 
      isPressDown=true; 
      break; 
    } 
} 

public void move(){ 
    if (isPressUp){ 
     panzer.moveUp(); 
     if (isPressRight){ 
      panzer.rotateRight(); 
     }else if (isPressLeft){ 
      panzer.rotateLeft(); 
     } 
    }else if (isPressDown){ 
     panzer.moveDown(); 
     if (isPressRight){ 
      panzer.rotateRight(); 
     }else if (isPressLeft){ 
      panzer.rotateLeft(); 
     } 
    }else if (isPressLeft){ 
     panzer.rotateLeft(); 
    }else if (isPressRight){ 
     panzer.rotateRight(); 
    } 
} 

public void onKeyReleased(KeyEvent event){ 
    switch (event.getCode()){ 
     case LEFT: 
      isPressLeft=false; 
      break; 
     case RIGHT: 
      isPressRight=false; 
      break; 
     case UP: 
      isPressUp=false; 
      break; 
     case DOWN: 
      isPressDown=false; 
      break; 
    } 
} 

私がfalseに変更されただけisPressRight、私は右のキーを離すと、シングルステップを試してみました。 isPressUpはまだtrueです。私は問題がmove()にあると思う。

答えて

1

これはスティッキーキーの問題です。私は前にそれを持っていた。

これを行う。

// In move method 
if (!isPressLeft && !isPressRight){} // Set the rotating speed of the player to 0 or whatever you do 
if (!isPressUp && !isPressDown){} // Set velocity of the player to 0 or whatever you do. 
+0

ありがとうございます、あなたの答えは私の問題の「半分」を解決します。あなたのコードを追加した後、タンクは1つの鍵を離した後、正しい方向に進むか回転する機会が約50%あります。ときにはタンクが止まることもあります。それは変だね。 「スティッキーキーの問題」を具体的に説明できますか? – Emanon

+0

私のコードはここから来て、あなたのコードに合わせて修正してください。 https://youtu.be/JrSjwQbTldg – ShivGames

+0

さらにテストした後、バグが起きた時がわかります。最初に押してから右に押すと、タンクが前進して右に回転し始めます。私が釈放して右に押し続けると、タンクは前進を止めて正常に回転するだけですが、まず最初に右にリリースすれば、タンクは動いて回転しなくなります。同様に、もし私がまず最初に右を保持し、最初に解放すると、タンクも停止する。 – Emanon

関連する問題