Java多个按键

时间:2014-07-14 23:30:44

标签: java key awt keypress keylistener

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

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

谢谢!

2 个答案:

答案 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");
            }
        }
    });

基本上,按键仅设定播放器的移动方向。要停止播放器,它会检查你是否按照你要去的方向释放了密钥。