最近ゲームをしていて、問題が発生しました。私はWASDキーを押したときに、応答がなかったことがありましたが、左矢印キーまたは右矢印キーを押すとうまくいきました。また、KeyPressedとkeyReleasedの両方でSystem.out.println()を使用してデバッグを試みましたが、応答がないときにはkeyPressedには印刷されず、keyReleasedにはメッセージが表示されませんでした。この問題は本当に私を混乱させました。Java keyReleasedはうまく機能しましたが、keyPressedコントロールが失われました
私はゲームにJFrameを使用しており、JFrameにのみキャンバスを追加します。 JFrameとCanvasの両方にkeyListenerを追加しました(私はそれらのうちの1つを削除しようとしましたが、requestFocusは解決していません)。
ここにコードがあります。 keyPressedの場合
:keyReleasedについては
@Override
public void keyPressed(KeyEvent e) {
//When keyPressed lost control, this line did not even work
System.out.println("key pressed");
if(e.getKeyCode() == KeyEvent.VK_A){
left = true;
}
else if(e.getKeyCode() == KeyEvent.VK_D){
right = true;
}
else if(e.getKeyCode() == KeyEvent.VK_SPACE){
jump();
}
else if(e.getKeyCode() == KeyEvent.VK_LEFT){
attackLeft = true;
}
else if(e.getKeyCode() == KeyEvent.VK_RIGHT){
attackRight = true;
}
else if(e.getKeyCode() == KeyEvent.VK_R) init();
else if(e.getKeyCode() == KeyEvent.VK_Q) System.exit(0);
}
:keyPressedが働いていなかった
@Override
public void keyReleased(KeyEvent e) {
//This line will output the message every time I released even
//if keyPressed did not work.
System.out.println("Key released");
if(e.getKeyCode() == KeyEvent.VK_A) left = false;
else if(e.getKeyCode() == KeyEvent.VK_D) right = false;
else if(e.getKeyCode() == KeyEvent.VK_LEFT) attackLeft = false;
else if(e.getKeyCode() == KeyEvent.VK_RIGHT) attackRight = false;
}
出力例:
Key pressed
Key released
Key pressed
Key released
Key released
Key released
Key released
Key released
Key released
Key released
Key released
Key released