2017-01-08 6 views
0

私は自分のコードを手伝ってくれる人がいたらとても感謝しています。私はゲームを開発する際にコードを学習しています。javaのKeyEventで現在のkeyPressedを更新するにはどうすればよいですか?

  • 私は、基本的なPONGゲームのコントロールをスムーズにしようとしていますが、keyEvent/keyPressedにこの問題があります。私は左に行くためにDを使用しています。右にDを押し、Aを押すとDを放しずに、変更を認識して左に移動しますが、Dを押したままAを離しておくと、keyEvent Dが押されたことに気付かず、Dをもう一度押すまでラケットは動かない。 keyEventまたはkeyPressedに、現時点で何が起きているかを更新し、それに反応するように指示する方法はありますか?

ここにコードの一部があります。 p.s.私はオーバーフローと私はまだ学んでいる流暢なJavaプログラマーではなく、スタックの新しいです。私の質問は非常にあいまいまたは非特異的であればごめんなさい... はまた、動きが(1)ラケットの動きの座標を作るのx + = 1と移動(-1)x軸= 1 */

修正試行#1:変更はそれがうまくいくことを望んなされた後
私はこの状況に対処するための最良の方法は、ブール配列を作成することです...、returnステートメントを使用して

public void keyPressed(KeyEvent e) { 
    //MOVE LEFT 
    if (e.getKeyCode() == KeyEvent.VK_A){    
     if(e.getKeyCode() == KeyEvent.VK_D){ 
      move(1); 
      //maybe update? 
      return; 
     }       
     else 
      move(-1);   
    }  
    //MOVE RIGHT 
    if (e.getKeyCode() == KeyEvent.VK_D){     
     if(e.getKeyCode() == KeyEvent.VK_A) { 
      move(-1); 
      //maybe update? 
      return; 
     } 
     else 
      move(1); 
    }    
} 

答えて

0

を全く結果を試していないし、すべての値をそこに格納し、後で使用してください。これにより、アップデートがよりスムーズに処理され、より多くの組織化が可能になります。プレス法に続いてトップタイプ

public static boolean[] keys = new boolean[999]; 

で配列を作成するには、単に

を使用し、後でそれを参照するためにその後

リリース方式で
public void keyPressed(KeyEvent e) { 
    keys[e.getKeyCode()] = true; 
} 

そして最後に

public void keyReleased(KeyEvent e) { 
    keys[e.getKeyCode()] = false; 
} 

を行います

[class].keys[KeyEvent.[key]] 
+0

「keys [e.getKeyCode() ] =!pause; "休止は何ですか? – orangeSauce

+0

@orangeSauceこのコードは、既に書いたコードからコピーして貼り付けたものです。今すぐ削除されました – FacelessTiger

関連する問題