我尝试搜索如何在 java 中处理多个按键,但我发现的所有解决方案都假设所有按键都被按下。
我正在创建一个非常简单的游戏,其中我加载的图像将沿着画布移动。我希望它使用向左、向右和向上箭头键向左、向右和跳跃。我的问题是,当我按下左右键时,它们工作得很好。但是,当我按下向上箭头键时,它只是跳跃并一起停止移动。
我有一个所有按下的键的数组列表和一个 run() 方法,该方法检查所有按下的键并执行特定的工作。但是 java 只记住我按下的最新键,一旦我按下向上箭头键,它就不会调用 run() 方法。
你建议我怎么做?我尝试过线程,但它们混淆了我的代码(或者我做错了什么?)。
这是我的代码:
public class Moving implements KeyListener {
ProgramClass bg; //this is another class
Set<Integer> pressed = new HashSet<Integer>();
public Moving (ProgramClass aa) {
bg = aa;
}
public void keyPressed (KeyEvent ae) {
pressed.add(ae.getKeyCode());
run();
}
public void keyTyped (KeyEvent ae) {
}
public void keyReleased (KeyEvent ae) {
pressed.remove (ae.getKeyCode());
if (bg.left==false) {
if (ae.getKeyCode()==KeyEvent.VK_UP) {
bg.yy -=40;
}
}
run();
}
public void run () {
if (bg.left==true) {
if (pressed.contains(KeyEvent.VK_A)) {}
if (pressed.contains(KeyEvent.VK_D)) {
if (bg.pic==true)
bg.pic = false;
else
bg.pic = true;
if (bg.x==-550)
bg.x = -2;
else
bg.x -= 2;
}
}
if (bg.left==false) {
if (pressed.contains(KeyEvent.VK_LEFT)) {
if (bg.pic==true)
bg.pic = false;
else
bg.pic = true;
if (bg.x==550)
bg.x = 2;
else
bg.x += 2;
}
if (pressed.contains(KeyEvent.VK_RIGHT)) {}
if (pressed.contains(KeyEvent.VK_UP)) {
bg.yy -=40;
}
}
}
}
谢谢!