java - KeyPressed/KeyReleased 不起作用?

标签 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 的 boolean 值,loadScores 调用一个 png 文件。

最佳答案

你不能这样做:

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

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

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

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

关于java - KeyPressed/KeyReleased 不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48264131/

相关文章:

java - Gradle 依赖项缓存可能已损坏问题

javascript - 在 JavaScript 中的按键上捕获 KeyCode

java - 从字符串中删除重复字符的方法(Java)

java - 在 Hadoop MapReduce 中查找除 “the” 、 “am” 、 “is” 和 “are” 之外的前 10 个最常用词?

python - 使用 Python for Linux 模拟按键事件

delphi - 在 Delphi Mdi 应用程序的父窗口中使用 KeyDown 事件

java - 如何知道用户何时真正释放了Java中的 key ?

linux - qt keyPress/keyRelease 通知在 Vista 和 Linux 上的工作方式不同

OpenGL/Gtkmm 游戏 - 键盘移动

java - JList/ListModel getElements 不起作用