今天我用我KeyListener
的方式按照我总是这样的方式为我的游戏添加了键盘输入,但出于某种原因,在我的程序中,只要我在窗口外单击并再次单击,键输入就会停止工作。以下是我在keyPressed
和keyReleased
方法中的内容:
public void keyPressed(KeyEvent e) {
int code = e.getKeyCode();
switch (code) {
case KeyEvent.VK_W:
keys[0] = true;
break;
case KeyEvent.VK_D:
keys[1] = true;
break;
case KeyEvent.VK_S:
keys[2] = true;
break;
case KeyEvent.VK_A:
keys[3] = true;
break;
}
}
public void keyReleased(KeyEvent e) {
int code = e.getKeyCode();
switch (code) {
case KeyEvent.VK_W:
keys[0] = false;
break;
case KeyEvent.VK_D:
keys[1] = false;
break;
case KeyEvent.VK_S:
keys[2] = false;
break;
case KeyEvent.VK_A:
keys[3] = false;
break;
}
}
答案 0 :(得分:3)
KeyListener
因焦点问题而臭名昭着。为了使KeyListener
引发一个事件,它注册的组件不仅必须是可聚焦的,而且必须具有焦点。
相反,您应该使用具有克服这些缺点的机制的Key Bindings
<强>修订强>
如果您正在使用AWT组件,则会遇到另外(少数)问题。实际上,当用户点击调用requestFocusInWindow
时,您需要使组件可以聚焦答案 1 :(得分:1)
看起来您可能正在尝试使用键盘进行组件动画。请参阅Motion With the Keyboard,其中介绍了使用KeyListener时遇到的一些问题,并说明了如何使用Key Bindings。