Java-KeyListener:如何触发事件? [英] Java-KeyListener: How to fire Events?

查看:231
本文介绍了Java-KeyListener:如何触发事件?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我可以在KeyListener中为非常简单的游戏编写控件.我有以下问题.

i programming the control for a very simple game in a KeyListener. Ive got the Following Problem.

我做了这样的事情(只是一个简单的例子,不是我实现的代码):

I did something like this(only an easy example not my implemented code):

public void keyPressed(KeyEvent e) {
        if (e.getKeyCode() == KeyEvent.VK_LEFT) {
            leftPressed = true;
            Methodxyz(leftpressed,rightpressed,uppressed)
        }
        if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
            rightPressed = true;
            Methodxyz(leftpressed,rightpressed,uppressed)
        }
        if (e.getKeyCode() == KeyEvent.VK_UP) {
            upPressed = true;
            Methodxyz(leftpressed,rightpressed,uppressed)
        }
    } 

public void keyReleased(KeyEvent e) {           
        if (e.getKeyCode() == KeyEvent.VK_LEFT) {
            leftPressed = false;
        }
        if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
            rightPressed = false;
        }
        if (e.getKeyCode() == KeyEvent.VK_UP) {
            upPressed = false;
        }
    }

如果我同时按2个键(向左,向上),则可以移动字符对角线.问题是监听器与最后按下的KeyEvent一起使用,因此,如果我向左按下,然后向上,但没有发布 向左释放,则对象将不会移动(仍被按下).

If i press 2 keys(left,up) at the same time youre able to move the charachter diagonal. The thing is the listener works with the last pressed KeyEvent so if i press left then up, but didnt release the left and release up, the object wont be move(left is still pressed).

我该如何处理? 是否可以在我的按键侦听器的按键方法中触发按键事件,直到被左击为假?

How can i handle that? Is it possible to fire keypressed events in my keypressed method of my keylistener til leftpressed is false?

有什么想法吗?

预先感谢

推荐答案

不要在keypress方法内调用移动方法,而是每当您在游戏循环中调用更新时,也要在输入侦听器中调用一个更新方法来检查哪些键已被按下,这将允许您同时具有多个按键,一旦释放按键,这些按键将被设置为false,例如:

Don't call the movement method inside the keypress method, instead whenever you call the updates in your gameloop also call an update method in your inputlistener that checks which keys have been pressed, this will allow you to have multiple keypresses at the same time, keypresses that will be set to false once the key is released, like so:

在您的输入处理程序中:

In your inputhandler:

public void update() {

        if (up == true) {
            SomeMethod(Key.UP);
        }
        if (down == true) {
            SomeMethod(Key.DOWN);
        }
        if (left == true) {
            someMethod(Key.LEFT);
        }
        if (right == true) {
            someMethod(Key.RIGHT);
        }


}
    public void keyReleased(KeyEvent e) {
    switch (e.getKeyCode()) {
    case KeyEvent.VK_S:
        down = false;
        break;
    case KeyEvent.VK_W:
        up = false;
        break;
    case KeyEvent.VK_A:
        left = false;
        break;
    case KeyEvent.VK_D:
        right = false;
        break;
    }
}

public void keyPressed(KeyEvent e) {
    switch (e.getKeyCode()) {
    case KeyEvent.VK_S:
        down = true;
        break;
    case KeyEvent.VK_W:
        up = true;
        break;
    case KeyEvent.VK_A:
        left = true;
        break;
    case KeyEvent.VK_D:
        right = true;
        break;

这篇关于Java-KeyListener:如何触发事件?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆