簡體   English   中英

Java如何使用KeyEvent

[英]Java how to use 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鍵)。 要檢查是否按下了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;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM