web-dev-qa-db-ja.com

Javaで同時キー押下を処理するにはどうすればよいですか?

Javaで同時キー押下を処理するにはどうすればよいですか?

ゲームを作成しようとしていますが、一度に複数のキーを押す必要があります。

キーを押したまま(前に進むなど)、別のキーを押したまま(たとえば、左に曲がる)すると、新しいキーは検出されますが、古い押されたキーは検出されなくなります。

17
Auras

1つの方法は、現在どのキーが押されているかを追跡することです。

KeyPressedイベントを取得したら、新しいキーをリストに追加します。 keyReleasedイベントを取得したら、リストからキーを削除します。

次に、ゲームループで、キーのリストにあるものに基づいてアクションを実行できます。

18
Michael Myers

これは、CTRL + Zが押されたときにアクションを実行する方法を示すコードサンプルです。

import Java.awt.*;
import Java.awt.event.KeyEvent;
import Java.awt.event.KeyListener;
class p4 extends Frame implements KeyListener
{
    int i=17;
    int j=90;
    boolean s1=false;
    boolean s2=false;

    public p4()
    {
        Frame f=new Frame("Pad");

        f.setSize(400,400);
        f.setLayout(null);
        Label l=new Label();
        l.setBounds(34,34,88,88);
        f.add(l);

        f.setVisible(true);
        f.addKeyListener(this);
    }

    public static void main(String arg[]){
        new p4();
    }

    public void keyReleased(KeyEvent e) {
        //System.out.println("re"+e.getKeyChar());

        if(i==e.getKeyCode())
        {
            s1=false;
        }

        if(j==e.getKeyCode())
        {
            s2=false;
        }
    }

    public void keyTyped(KeyEvent e) {
        //System.out.println("Ty");
    }

    /** Handle the key pressed event from the text field. */
    public void keyPressed(KeyEvent e) {
        System.out.println("pre"+e.getKeyCode());

        if(i==e.getKeyCode())
        {
            s1=true;
        }

        if(j==e.getKeyCode())
        {
            s2=true;
        }

        if(s1==true && s2==true)
        {
            System.out.println("EXIT NOW");
            System.exit(0);
        }
    }

    /** Handle the key released event from the text field. */

}
4
Ganesh

一般的に言って、あなたが説明していることは bitmasks を使用して達成することができます。

2
Yuval Adam