Java如何使用KeyEvent

标签 java keyevent

我现在正在尝试制作游戏,但我无法找到如何通过同时按下 shift 来让玩家走得更快。

这是我的一些代码:

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

    for(int i = 0; i < handler.object.size(); i++) {
        GameObject tempObject = handler.object.get(i);

        if(tempObject.getId() == ID.Player) {
            //key events for player 1
            if(key == KeyEvent.VK_W) tempObject.setVelY(-5);
            if(key == KeyEvent.VK_S) tempObject.setVelY(5);
            if(key == KeyEvent.VK_A) tempObject.setVelX(-5);
            if(key == KeyEvent.VK_D) tempObject.setVelX(5);
            if(key == KeyEvent.VK_W && key == KeyEvent.VK_SHIFT) tempObject.setVelY(-8);
            if(key == KeyEvent.VK_S && key == KeyEvent.VK_SHIFT) tempObject.setVelY(8);
            if(key == KeyEvent.VK_A && key == KeyEvent.VK_SHIFT) tempObject.setVelX(-8);
            if(key == KeyEvent.VK_D && key == KeyEvent.VK_SHIFT) tempObject.setVelX(8);
        }
    }
    if(key == KeyEvent.VK_ESCAPE) System.exit(1);
}

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

    for(int i = 0; i < handler.object.size(); i++) {
        GameObject tempObject = handler.object.get(i);

        if(tempObject.getId() == ID.Player) {
            if(key == KeyEvent.VK_W) tempObject.setVelY(-0);
            if(key == KeyEvent.VK_S) tempObject.setVelY(0);
            if(key == KeyEvent.VK_A) tempObject.setVelX(-0);
            if(key == KeyEvent.VK_D) tempObject.setVelX(0);
            if(key == KeyEvent.VK_W && key == KeyEvent.VK_SHIFT) tempObject.setVelY(-0);
            if(key == KeyEvent.VK_S && key == KeyEvent.VK_SHIFT) tempObject.setVelY(0);
            if(key == KeyEvent.VK_A && key == KeyEvent.VK_SHIFT) tempObject.setVelX(-0);
            if(key == KeyEvent.VK_D && key == KeyEvent.VK_SHIFT) tempObject.setVelX(0);
        }
    }
}

现在所有这些都有效,但不会将 velX 更改为 7 到 5。

最佳答案

实际上不能同时按下两个键。 keyPressed() 方法实际上被调用了两次(一次用于字母按钮,一次用于换档)。要检查是否按下了 shift,请将全局 boolean 值设置为按下 shift 的状态,并使用 keyPressed 和 keyReleased 管理变量的状态。例如:

public boolean shiftPressed;

public void keyPressed(KeyEvent e) {
    if(shiftPressed && e.getKeyCode() == VK_(a letter)) {
        //Execute some code
    }
    else if(e.getKeyCode() == VK_SHIFT) {
        shiftPressed = true;
    }
}

public void keyReleased(KeyEvent e) {
    if(e.getKeyCode() == VK_SHIFT) {
        shiftPressed = false;
    }
}

关于Java如何使用KeyEvent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48406872/

相关文章:

android - keyevent 安卓手机被锁

java - 如何在Intellij Idea中找到所有未使用的类?

java - com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException : getting a SEVERE: null

java - Eclipse 调试器看不到代码更改

objective-c - 如何在全屏应用程序中处理 Cocoa 事件

java - JTable 捕获关键事件?

accessibility - 使用 JAWS 获取关键事件

java - Component.getInstance(GateAction.class, true) 抛出 ClassCastException

java - 如何在Android项目中包含Java项目?

java - 当键盘输入与字母匹配时,使字母/数字消失