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();
}
答案 0 :(得分:1)
最简单的方法是检测它是否是第一次运行。
boolean b = false;
@Override
public void keyPressed(KeyEvent arg0) {
if(!b){
//do stuff
}
b = true;
}
@Override
public void keyReleased(KeyEvent arg0) {
b = false;
}
此代码的问题在于您无法同时按住多个键,解决此问题的方法是为您要使用的每个键使用不同的布尔值。