Java多按键

Java多按键,java,key,awt,keypress,keylistener,Java,Key,Awt,Keypress,Keylistener,有没有一种简单的方法可以同时检查多个按键?我走路用的是: this.addKeyListener(new KeyAdapter() { public void keyPressed(KeyEvent arg0) { if(arg0.getKeyCode()==KeyEvent.VK_LEFT) { if (checkMovement(-1, user.getFalli

有没有一种简单的方法可以同时检查多个按键?我走路用的是:

    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语句来检查当线程循环时它是否被按下吗


谢谢

对于您的
移动
键,您所做的一切都很好

对于sprint按钮,使用
KeyAdapter#keyppressed
记录按键按下的时间,使用
KeyAdapter#keydrelease
记录按键释放的时间(例如,将其存储在
布尔值中)

然后,当移动事件发生时,检查布尔值以查看您是在行走还是在短跑。例如,这里有一个按键适配器,它记录当前按下的按键

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
Set pressed=new HashSet();
this.addKeyListener(新的KeyAdapter(){
按下公共无效键(KeyEvent arg0){
add(arg0.getKeyCode());
}
公共无效密钥已释放(KeyEvent arg0){
按下.remove(arg0.getKeyCode());
}
});
//如果按下.contains(键代码),则该键当前处于按住状态

我找到了一个我非常喜欢的解决方案。如果其他人想知道我是如何做到的,我会在下面发布代码:)


基本上,按键只设置玩家的移动方向。要停止播放机,它会检查您是否按您要去的方向释放了键。

我已经尝试过了,但除非我只是做错了,否则每当我按下第二个按钮时,它就会取消按住按钮移动按钮,因此您必须再次按下箭头键。有没有办法绕过这个问题?我做错了吗?@user38829你可能做错了,尽管你还没有发布那段代码,我真的无法进一步评论。您可能还应该使用
keyTyped
事件来检测未按住的按钮。我的尝试是:。它仍然需要用户先按Enter键进行冲刺,然后按箭头键移动。但是,按箭头键,然后按enter键,将使播放机停止静止运行
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");
            }
        }
    });