タイトルが示唆しているように、私のJavaゲームでは、スペースバーと他のキーを同時に押しても検出できません。Java KeyPressed - 他のキーがあまりにも多い場合にスペースバーが押されていると検出できない
たとえば、スペースバーはシュートキーで、矢印キーはプレーヤーを移動させます。上向き矢印キーと左向き矢印キーとスペースバーを押している場合は、弾丸を上にして左に撃たなければなりません。
しかし、デバッグに複数のSystem.out.println();
を使用した後、私は2つのキーを押していると、押した場合にスペースバーを検出していないことがわかりました。
public void keyPressed(KeyEvent e) {
if(e.getKeyCode() == 32){
pressingSpacebar = true;
System.out.println("Spacebar pressed true");
}
// Up arrow key
if(e.getKeyCode() == 38){
up = true;
System.out.println("Up = true");
}
// Down arrow key
if(e.getKeyCode() == 40){
down = true;
System.out.println("Down = true");
}
// Right arrow key
if(e.getKeyCode() == 39){
right = true;
System.out.println("Right = true");
}
// Left arrow key
if(e.getKeyCode() == 37){
left = true;
System.out.println("Left = true");
}
}
:
if(pressingSpacebar){
if(right == true && down == true && up == false && left == false){
// Shoot bullet
}
}
スペースバーが検出されていない理由:
public void keyReleased(KeyEvent e) {
if(e.getKeyCode() == 38){
up = false;
repaint();
}
if(e.getKeyCode() == 40){
down = false;
repaint();
}
if(e.getKeyCode() == 39){
right = false;
repaint();
}
if(e.getKeyCode() == 37){
left = false;
repaint();
}
if(e.getKeyCode() == 32){
pressingSpacebar = false;
}
}
これはあなたがスペースバーと複数のキーを押している場合、私はチェックしていますどのように?スペースバーが押されているかどうかをチェックしなければ、弾丸は正常に発射されますが、スペースバーをチェックするとそれは検出されません。
注:私はこの質問に類似した他の投稿を読んだが、回答はあまり役に立たなかった。私はそれがこのようなものになると、まったくの初心者ですので、簡単な答えを与えるか、少し説明してみてください。前もって感謝します!
は、あなたがチェックする必要があります: http://stackoverflow.com/questions/2623995/swings-keylistener-and-multiple-keys-pressed-at-the-same-time – GoldenBolt
GoldenBoltは右である、これは重複しています。 KeyReleasedイベントがない2つのKeyPressedイベントがある場合、2つのキーが同時に押されます。 – Sentry
[この問題に対するMadProgrammerの回答](http://stackoverflow.com/a)に従って、[Key Bindings](http://docs.oracle.com/javase/tutorial/uiswing/misc/keybinding.html)を使用する方がよい/ 19823986/522444) –