Java KeyListener事件循环直到release键

时间:2013-01-20 22:03:37

标签: java awt keylistener

我正在研究一个简单的平台游戏,并且在播放器跳跃方面遇到了麻烦。发生的事情是,如果我按住空格键,玩家就会继续上升。我需要一些方法让播放器按空格键跳转一次。我目前用于跳转的KeyListener设置如下。

public void keyPressed(KeyEvent e) {
    int key = e.getKeyCode();

    if (key == KeyEvent.VK_SPACE)
        Input.jump = true;
}

public void keyReleased(KeyEvent e) {
    int key = e.getKeyCode();

    if (key == KeyEvent.VK_SPACE)
        Input.jump = false;
}

在我的Player类中,我有以下内容来切换跳转

if(Input.jump == true) jump();

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

问题不在于每次按键都会调用该事件 - 问题是Input.jump在您放开密钥之前是真的。

您可以尝试这样的事情:

public void keyPressed(KeyEvent e) {
    int key = e.getKeyCode();
    if (key == KeyEvent.VK_SPACE)
        if(!Input.jump) {
            velocity += jumpVelocity;
        }
        Input.jump = true;
}

public void keyReleased(KeyEvent e) {
    int key = e.getKeyCode();

    if (key == KeyEvent.VK_SPACE)
        Input.jump = false;
}

然后使用力度移动角色。

或者您可以使用某种布尔值 - 这实际上取决于您的情况。如果您使用布尔值,那么您需要具有类似以下代码的内容:

public void keyPressed(KeyEvent e) {
    int key = e.getKeyCode();
    if (key == KeyEvent.VK_SPACE)

        if(!Input.jump) {
            isJumping = true;
        } else {
            isJumping = false;
        }
        Input.jump = true;
}