Java多次按键和释放

时间:2013-02-21 02:58:15

标签: java keylistener

我试过在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;
            }
        }
    }
}

谢谢!

0 个答案:

没有答案