Hello :)我正在努力寻找处理java键输入的有效方法。我有一段代码:
public void keyPressed(KeyEvent e) {
if (checkInput) {
switch(e.getKeyCode()) {
case KeyEvent.VK_LEFT:
arrow[LEFT] = true; // boolean for my key input
checkInput = false;
break;
case KeyEvent.VK_RIGHT:
arrow[RIGHT] = true;
checkInput = false;
break;
}
}
}然后:
public void keyReleased(KeyEvent e) {
switch(e.getKeyCode()) {
case KeyEvent.VK_LEFT:
arrow[LEFT] = false; // boolean for my key input
checkInput = true;
break;
case KeyEvent.VK_RIGHT:
arrow[RIGHT] = false;
checkInput = true;
break;
}
}
}我的意思是,当我按下left或right功能时,keyPressed会停止检查按键输入,但它不起作用……在主类中,我有构造函数:
public Game() {
addKeyListener(new KeyListener() {
public void keyTyped(KeyEvent e) {
}
public void keyReleased(KeyEvent e) {
player.keyReleased(e); // function mentioted above are from Player class.
}
public void keyPressed(KeyEvent e) {
player.keyPressed(e);
}
});
setFocusable(true);
}发布于 2014-04-24 02:42:19
如果你想听我的意见,请不要试图在按下某个键的同时阻止其他键的按下。这似乎是一个用户指定的任务(按多个键),除非它对你的游戏有直接的危害,否则你应该把所有这些努力都放在一个不合理的限制中。
public boolean[] keys = new boolean[200]; //just enough to hold all key codes
public void keyPressed(KeyEvent e) {
keys[e.getKeyCode()] = true;
}
public void keyReleased(KeyEvent e) {
keys[e.getKeyCode()] = false;
}现在,您可以根据按下的键进行移动。
while(true) {
if(keys[KeyEvent.VK_RIGHT]) {
//move right
}
}但是,如果你真的想要这个限制:
public boolean[] keys = new boolean[200]
public boolean acceptEvents = true;
public void keyPressed(KeyEvent e) {
if(acceptEvents) {
keys[e.getKeyCode()] = true;
acceptEvents = false;
}
}
public void keyReleased(KeyEvent e) {
keys[e.getKeyCode()] = false;
acceptEvents = true;
}真的很难知道您试图用您给我们的有限资源做什么(您在代码示例中遗漏了很多东西),所以让我知道这是否有帮助
https://stackoverflow.com/questions/23252284
复制相似问题