我有一个游戏,我希望能够在按下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 */ }
}
解决了这个问题。代码
addKeyListener(new MyKeyListener());
是不正确的,它应该是
addKeyListeners(new MyKeyListener());