KeyPressed / KeyReleased无法正常工作?

时间:2018-01-15 13:37:38

标签: java keypress keyrelease

我试图在java中制作游戏,只是一个简单的平台游戏,但我在运行代码时遇到了困难。我似乎无法得到关键印刷机的任何回复。我认为唯一没有正常工作的是keyPressed和keyReleased函数。以下是相关代码。

public ReflexPanel() {

    initBoard();

    setFocusable(true);
    addKeyListener(this);

    Timer timer = new Timer(1000/120, this);
    timer.start();
}

private void initBoard() {

    loadMenu();

    int w = menu.getWidth(this);
    int h = menu.getHeight(this);
    setPreferredSize(new Dimension(w, h));
}



private void step() {
    if(mainMenu){
        if(ePressed) {
            System.exit(0);
        }

        if(hPressed) {
            loadScores();
            repaint();
        }
    }
}

public void keyTyped(KeyEvent e) {}

@Override
public void keyPressed(KeyEvent e) {
    if (e.getKeyCode() == 'e') {
        ePressed = true;
    }
    if (e.getKeyCode() == 'h') {
        hPressed = true;
    }
}

@Override
public void keyReleased(KeyEvent e) {
    if (e.getKeyCode() == 'e') {
        ePressed = false;
    }
    if (e.getKeyCode() == 'h') {
        hPressed = false;
    }
}

@Override
public void actionPerformed(ActionEvent e) {
    step();
}

默认情况下,ePressed和hPressed变量只是布尔值设置为false,而loadScores调用png文件。

2 个答案:

答案 0 :(得分:3)

你不能这样做:

if(e.getKeyCode() == 'e'){
    // code logic
}

KeyEvent::getKeyCode不会返回您在键盘上按下的字符。它“返回与此事件中的键关联的整数keyCode”。使用KeyEvent::getKeyCode时,您必须使用班级中预定义的KeyEvent key constants值。例如:

if(e.getKeyCode() == KeyEvent.VK_E){
    // code logic
}

或者您可以使用KeyEvent::getKeyChar “返回与此事件中的键相关联的字符”

答案 1 :(得分:2)

您正在使用getKeyCode()返回int值,其中包含KeyEvent类中给出的常量,例如KeyEvent.VK_E

您希望使用直接返回getKeyChar()的{​​{1}}。

'e'