如何在Java的KeyEvent中更新当前的keyPressed?

时间:2017-01-08 07:24:18

标签: java keyevent

如果有人可以帮我处理我的代码,我会非常感激,我在开发游戏时学习代码。

  • 我正在尝试使基本PONG游戏的控件感觉顺畅,但我有keyEvent / keyPressed的这个问题。我使用A向左移动,D向右移动,当我按住D然后按A,不放弃D它会注意到变化然后向左移动,但是一旦我放开A而D仍然按下,keyEvent不会注意到D被按下,这使得球拍不会移动,直到你再次按下D. 有没有办法告诉keyEvent或keyPressed更新当前发生的事情并做出反应?

这是代码的片段...... 附:我是堆栈溢出的新手,而不是一个流利的java程序员,我还在学习。如果我的问题很模糊或不明确,我很抱歉...... 另外,move(1)使球拍的坐标移动x + = 1并移动(-1)x- = 1 * /

  

修复尝试#1:
   我做了一个改变之后尝试使用一个返回语句,希望它可以工作,没有结果......

public void keyPressed(KeyEvent e) {
    //MOVE LEFT
    if (e.getKeyCode() == KeyEvent.VK_A){               
        if(e.getKeyCode() == KeyEvent.VK_D){
            move(1);
            //maybe update?
            return;
        }                           
        else
            move(-1);           
    }       
    //MOVE RIGHT
    if (e.getKeyCode() == KeyEvent.VK_D){                   
        if(e.getKeyCode() == KeyEvent.VK_A) {
            move(-1);
            //maybe update?
            return;
        }
        else
            move(1);
    }               
}

1 个答案:

答案 0 :(得分:0)

处理这种情况的最好方法是创建一个布尔数组并将所有内容的值存储在那里,然后再使用它。这样可以更加顺畅地处理更新,并允许您进行更多的组织。要在顶部类型

创建数组
public static boolean[] keys = new boolean[999];

然后在按下方法做

public void keyPressed(KeyEvent e) {
    keys[e.getKeyCode()] = true;
}

最后在发布方法中

public void keyReleased(KeyEvent e) {
    keys[e.getKeyCode()] = false;
}

然后再引用它,只需使用

[class].keys[KeyEvent.[key]]