Javaで同時キー押下を処理するにはどうすればよいですか?
ゲームを作成しようとしていますが、一度に複数のキーを押す必要があります。
キーを押したまま(前に進むなど)、別のキーを押したまま(たとえば、左に曲がる)すると、新しいキーは検出されますが、古い押されたキーは検出されなくなります。
1つの方法は、現在どのキーが押されているかを追跡することです。
KeyPressedイベントを取得したら、新しいキーをリストに追加します。 keyReleasedイベントを取得したら、リストからキーを削除します。
次に、ゲームループで、キーのリストにあるものに基づいてアクションを実行できます。
これは、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. */
}
一般的に言って、あなたが説明していることは bitmasks を使用して達成することができます。