#java #keyboard #keylistener #keyevent
#java #клавиатура #keylistener #keyevent
Вопрос:
У меня есть созданная игра, и я хочу иметь возможность приостанавливать игру при нажатии клавиши 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. Ваш код выглядит нормально. Получает ли acm.grachics (что бы это ни было) нажатия клавиш? Нужен ли фокус? Вы пробовали использовать JFrame для проверки вашего кода?
2. Является ли addKeyListener методом, предоставляемым вашей библиотекой? Назначаете ли вы слушателя правильному компоненту?
3. @ItFreak это было, однако я написал это неправильно, и IDE не уловила этого
Ответ №1:
Исправлена проблема. Код
addKeyListener(new MyKeyListener());
неверно, оно должно быть
addKeyListeners(new MyKeyListener());