Java如何使用KeyEvent

Java如何使用KeyEvent,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(tempObj

我现在正在尝试做一场比赛,我很难找到如何通过同时按下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。

实际上不能同时按下两个键。按键方法实际上被调用了两次,一次用于字母按钮,一次用于移位。要检查是否按下shift键,请将全局布尔值设置为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;
    }
}

实际上不能同时按下两个键。按键方法实际上被调用了两次,一次用于字母按钮,一次用于移位。要检查是否按下shift键,请将全局布尔值设置为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;
    }
}

@不客气。请你也在我的选票下面打勾,这样这个问题就不再被标记为未回答了吗?@TygerzPLayz不客气。请你也在我的选票下面打勾,这样问题就不再被标记为未回答了?