【发布时间】:2018-02-25 18:10:03
【问题描述】:
KeyListener 工作正常,但我不知道如何让它只执行一次代码,类似于 MouseListener 类中的 mouseClicked。 (当我按下一个键时,它将循环执行代码,直到释放该键,我只希望它在每次按下时执行一次)
编辑:这是用于游戏中的暂停功能
代码:
public void keyPressed(KeyEvent e) {
toggleKey(e.getKeyCode(), true);
}
public void keyReleased(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_ESCAPE) {
//toggleKey(e.getKeyCode(), true);
} else {
toggleKey(e.getKeyCode(), false);
}
}
public boolean paused = false;
public void toggleKey(int keyCode, boolean isPressed) {
if (keyCode == KeyEvent.VK_W || keyCode == KeyEvent.VK_UP) {up.toggle(isPressed);}
if (keyCode == KeyEvent.VK_S || keyCode == KeyEvent.VK_DOWN) {down.toggle(isPressed);}
if (keyCode == KeyEvent.VK_A || keyCode == KeyEvent.VK_LEFT) {left.toggle(isPressed);}
if (keyCode == KeyEvent.VK_D || keyCode == KeyEvent.VK_RIGHT) {right.toggle(isPressed);}
if (keyCode == KeyEvent.VK_ESCAPE) {
pause.toggle(isPressed);
}
}
类尝试使用它:
if (input.pause.isPressed()) {
input.paused = true;
if (input.paused & input.pause.isPressed()) {
paused = false;
}
}
if (!input.paused) {
frames++;
render();
}
【问题讨论】:
-
请发布您尝试过但不起作用的代码。
-
寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:如何创建 minimal reproducible example。使用edit 链接改进您的问题 - 不要通过 cmets 添加更多信息。谢谢!
-
你应该改用key bindings API
标签: java keylistener