2

私はJavaでもっと重要な問題を抱えています。Key イベントはSPACEそれ自体で問題なく動作し、他のキーが押されている場合は...

しかし、UPキーとLEFTキーを同時に押すと、SPACEイベントは発生しません。ただし、または を単独で、または他のキーと一緒に押すと、 がSPACE起動します。LEFTUP

これが私のコードです:

public void keyPressed(KeyEvent e) 
{
    if(e.getKeyCode() == KeyEvent.VK_UP)
    {
        upkeyisdown = true;         
    }
    if(e.getKeyCode() == KeyEvent.VK_DOWN)
    {
        downkeyisdown = true;
    }
    if(e.getKeyCode() == KeyEvent.VK_LEFT)
    {
        leftkeyisdown = true;
    }
    if(e.getKeyCode() == KeyEvent.VK_RIGHT)
    {
        rightkeyisdown = true;
    }
    if(e.getKeyCode() == KeyEvent.VK_SPACE)
    {
        spacekeyisdown = true;
    }

}  
public void keyReleased(KeyEvent e) 
{
    if(e.getKeyCode() == KeyEvent.VK_UP)
    {
        upkeyisdown = false;            
    }

    if(e.getKeyCode() == KeyEvent.VK_DOWN)
    {
        downkeyisdown = false;
    }
    if(e.getKeyCode() == KeyEvent.VK_LEFT)
    {
        leftkeyisdown = false;
    }
    if(e.getKeyCode() == KeyEvent.VK_RIGHT)
    {
        rightkeyisdown = false;
    }
    if(e.getKeyCode() == KeyEvent.VK_SPACE)
    {
        spacekeyisdown = false;
    }
}  
4

1 に答える 1

3

で説明したようにKeyEvent、複数の同時イベントKEY_PRESSEDまたはKEY_RELEASEDイベントはサポートされていません。同じことが。にも当てはまりますKeyStrokeここに示すように、修飾子を含むインスタンスにバインドできます。修飾子には、「alt、shift、control、meta、altGraph、またはそれらの組み合わせ」が含まれる場合があります。KeyStroke

補遺:「UPキーとLEFTキーを同時に押すと、SPACEイベントは発生しません。」

「キーリスナーの書き方」からをKeyEventDemo使用すると、予想されるイベントとイベントが表示されます。確実に先行しますが、イベントが実際には「同時に」発生することはないため、順序は異なります。コードの他の場所で論理エラーが発生していると思われます。複雑さを管理する1つの方法は、KEY_PRESSEDKEY_RELEASEDKEY_PRESSEDKEY_RELEASED

  • を使用してsenumを保持します。keyCodeこのゲームは単一のキーストロークを使用しますがenum、このコンテキストでのを使用する方法を示しています。

  • sを使用EnumSetして、認識された組み合わせを含めます。ここに関連する例があります。

于 2012-06-30T02:01:05.533 に答える