按键/按键释放不起作用



我正在尝试用java制作游戏,只是一个简单的平台游戏,但是在运行代码时遇到困难。我似乎无法从按键中获得任何响应。我唯一能想到的没有正常工作的是按键和按键释放功能。以下是相关代码。

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 的布尔值,loadScore 调用 png 文件。

你不能这样做:

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

KeyEvent::getKeyCode不会返回您在键盘上按下的字符。它"返回与此事件中的键关联的整数键代码"。使用KeyEvent::getKeyCode时,必须使用类中预定义的 KeyEvent 键常量值。所以例如:

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

或者,您可以使用"在此事件中返回与键关联的字符">KeyEvent::getKeyChar

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

您希望使用直接返回'e' getKeyChar()

if (e.getKeyChar() == 'e') {  // Now it has an actual chance of working

最新更新