KeyListener не обнаруживает нажатия клавиш - PullRequest
0 голосов
/ 17 апреля 2019

У меня есть встроенная игра, и я хочу иметь возможность приостановить игру, когда нажата клавиша P .Однако во время игры KeyListener, похоже, не обнаруживает нажатие клавиши P .

Правильно ли введен мой код?Разместил ли я addKeyListener в нужном месте?

Есть аналогичные вопросы по SO, однако все они, похоже, используют JFrame, тогда как я использую Графическая библиотека ACM .Не уверен, что это имеет значение.

Основной игровой цикл:

@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 */ }
}

1 Ответ

1 голос
/ 17 апреля 2019

Исправлена ​​проблема. Код

addKeyListener(new MyKeyListener());

неверно, должно быть

addKeyListeners(new MyKeyListener());
...