是否有一种简单的方法可以同时检查多个按键?我走路使用:
this.addKeyListener(new KeyAdapter()
{
public void keyPressed(KeyEvent arg0)
{
if(arg0.getKeyCode()==KeyEvent.VK_LEFT)
{
if (checkMovement(-1, user.getFalling()))
{
user.move("left");
}
}
}
});
并希望能够在移动时按住“冲刺”按钮。我尝试使用另一个KeyListener检查另一个键,然后使用方法“user.sprint()”,但它不会一次识别两个按键。
有没有简单的方法来检查钥匙是否关闭?我有多个线程在运行,我可以在线程中放置某种if语句来检查线程循环时它是否被按下了吗?
谢谢!
答案 0 :(得分:0)
对于您的move
密钥,您正在做的事情很好。
对于您的冲刺按钮,使用KeyAdapter#keyPressed
记录按下按键的时间,并使用KeyAdapter#keyReleased
记录密钥被释放的时间(例如,将其存储在boolean
中)。
然后当你的移动事件发生时,检查布尔值以查看你是走路还是短跑。例如,这是一个键适配器,它记录当前按下的键。
Set<Integer> pressed = new HashSet<>();
this.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent arg0) {
pressed.add(arg0.getKeyCode());
}
public void keyReleased(KeyEvent arg0) {
pressed.remove(arg0.getKeyCode());
}
});
// if pressed.contains(keyCode), that key is currently being held
答案 1 :(得分:0)
我找到了一个我非常喜欢的解决方案。如果其他人想看看我是怎么做的,我会在下面发布代码:)
this.addKeyListener(new KeyAdapter()
{
public void keyPressed(KeyEvent arg0)
{
if(arg0.getKeyCode()==KeyEvent.VK_LEFT)
{
if (!world.user.moving()) if (world.checkMovement(-1)) world.user.move("left");
}
if(arg0.getKeyCode()==KeyEvent.VK_RIGHT)
{
if (!world.user.moving()) if (world.checkMovement(1)) world.user.move("right");
}
if (arg0.getKeyCode()==KeyEvent.VK_UP)
{
world.user.jump();
}
}
public void keyReleased(KeyEvent arg0)
{
if(arg0.getKeyCode()==KeyEvent.VK_LEFT)
{
world.user.move("left","stop");
}
if (arg0.getKeyCode()==KeyEvent.VK_RIGHT)
{
world.user.move("right","stop");
}
}
});
基本上,按键仅设定播放器的移动方向。要停止播放器,它会检查你是否按照你要去的方向释放了密钥。