2016-10-14 8 views
1

問題があります。私は矢印を押すと呼ばれるいくつかの簡単な関数を実装しました。2つの矢印が押されていない - Java swing

public void keyPressed(KeyEvent e) 
    { 
     int key = e.getKeyCode(); 
     if(key == KeyEvent.VK_LEFT) 
     { 

      double t = p.getAngle(); 
      if(p.getIsTurning()) 
       t+=3; 
      else 
       t+=6; 
      p.setAngle(t); 
      p.setIsTurinig(true); 

     } 
     else if(key == KeyEvent.VK_UP) 
     { 
      p.setVelX(p.getVelX()+p.getAcceleration()); 
      p.setIsAccelerating(true); 
     }  
} 

上矢印を押してから左にすると、すべて正常に機能します。しかし、左矢印と上矢印を押すと上矢印機能だけが検出されます。

何が原因ですか?

+0

もちろん最初のelse ifがあるべきなら – chodi

+2

それを示すためにコードを編集する必要があります。 – DevilsHnd

+1

KeyListenerを使用しないでください。特定のイベントを処理するには、 'Key Bindings'を使用する必要があります。複数のキーが同時に押された場合の詳細と作業例については、[キーボードを使用したモーション]()を参照してください。 – camickr

答えて

1

どちらもの場合、左矢印キーと上矢印キーが同時に押されたことが検出されます。このイベントは、の最後のキーが押された場合にのみ返されます。上矢印と左矢印キーを押しても、本当に検出しているのは左矢印キーだけです。あなたは非常にうまくDOWNとLEFTの矢印キーを押した可能性があり、同じIFの条件が発生します。いくつかのキーが同時に押されたか否かを検出する

一つの方法は、キーが押されている必要はないであることを示すためのブールフラグを作成することですが、あなたはまた、必要に応じてを改ざんするようにイベントをKeyReleased活用する必要があります。特定のキーが解放されたときにフラグを立てます。ブールフラグは、例えば、キーボードイベントにグローバルでなければなりません。その旨を

boolean keyOne = false; // flag for LEFT Arrow key 
boolean keyTwo = false; // flag for UP Arrow key 

public void keyPressed(KeyEvent e) { 
    int key = e.getKeyCode(); 
    if(key == KeyEvent.VK_LEFT) { keyOne = true; } 
    else if(key == KeyEvent.VK_UP) { keyTwo = true; } 

    if (keyOne && !keyTwo) { 
     System.out.println("Only the LEFT Arrow key is pressed!"); 
    } 
    else if (!keyOne && keyTwo) { 
     System.out.println("Only the UP Arrow key is pressed!"); 
    } 
    else if (keyOne && keyTwo) { 
     System.out.println("Both LEFT Arrow and UP Arrow keys are pressed!); 
    } 
} 

public void keyReleaseded(KeyEvent e) { 
    int key = e.getKeyCode(); 
    if(key == KeyEvent.VK_LEFT) { keyOne = false; } 
    else if(key == KeyEvent.VK_UP) { keyTwo = false; } 
} 

は少なくとも何か...

・プレイス(keyOne & & keyTwo)かの条件にご希望のコード。

関連する問題