【问题标题】:KeyListener not detecting keypressKeyListener 未检测到按键
【发布时间】:2019-09-07 18:45:46
【问题描述】:

我有一个游戏,我希望能够在按下 P 键 时暂停游戏。但是,在游戏运行时,KeyListener 似乎没有检测到 P 键 已被按下。

我的代码正确吗?我是否将addKeyListener 放在了正确的位置?

关于 SO 有类似的问题,但他们似乎都在使用 JFrame,而我使用的是 ACM Graphics Library。不确定这是否会有所不同。

主游戏循环:

@Override
public void run() {

    addKeyListener(new MyKeyListener());

    displayStartScreen();
    displayUI();
    drawBricks(getWidth() / 2.0, BRICK_Y_OFFSET);
    drawPaddle();

    while (lives > 0) {

        drawBall();
        playGame(); // additional game loop

        if (brickCounter == 0) {
            removeAll(); // removes all game objects
            displayUI();
            drawBricks(getWidth() / 2.0, BRICK_Y_OFFSET);
            drawPaddle();
            brickCounter = 100;
            }
        }
    } 
    if (brickCounter > 0) {
        removeAll();
        printGameOver();
    }
}

额外的游戏循环:

private void playGame() {

    getBallVelocity();

    while (true) {

        moveBall();
        updateUI();

        if (ball.getY() >= getHeight()) {
            lives--;
            break;
        }
        if (brickCounter == 0) {
            break;
        }
    }
}

KeyListener 类:

private class MyKeyListener implements KeyListener {

    @Override
    public void keyPressed(KeyEvent e) {
        int keyCode = e.getKeyCode();
        if (keyCode == KeyEvent.VK_P) {
            System.out.println("Key 'P' has been pressed!"); // test
        }
    }

    @Override
    public void keyReleased(KeyEvent e) { /* Empty body */ }

    @Override
    public void keyTyped(KeyEvent e) { /* Empty body */ }
}

【问题讨论】:

  • 您的代码看起来不错。 acm.grachics(无论是什么)是否接收按键?需要重点吗?您是否尝试过使用 JFrame 来检查您的代码?
  • addKeyListener 是你的库提供的方法吗?您是否将侦听器分配给正确的组件?
  • @ItFreak 是,但是我拼错了,IDE 没有找到它

标签: java keyboard keylistener keyevent


【解决方案1】:

解决了这个问题。代码

addKeyListener(new MyKeyListener());

不正确,应该是

addKeyListeners(new MyKeyListener());

【讨论】:

    猜你喜欢
    • 2013-12-16
    • 2015-07-09
    • 1970-01-01
    • 2015-05-07
    • 1970-01-01
    • 2012-08-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多