我正在做一个Java的作业,这是一个游戏。我想给用户一个暂停游戏的选项。我尝试使用KeyListeners。在按下键时,游戏停止。
现在我如何用相同的按钮再次开始游戏。
这是我的代码:
public void keyPressed(KeyEvent evt) {
int key = evt.getKeyCode();
if ( key == KeyEvent.VK_SPACE){
dog.setSpeed(0);
ball.setXspeed(0);
ball.setYspeed(0);
}
所以物体在移动,当我按空格键时,它们都停止了。(这很好)但是,当我再次按空格键时,即使我给它们新的速度值,它们也不会启动。
if ( key == KeyEvent.VK_SPACE){
dog.setSpeed(dogSpeed);
ball.setXspeed(xBallSpeed);
ball.setYspeed(yBallSpeed);
}
有人知道如何在Java中停止和启动一些事件吗?
这不是解决你问题的好办法。暂停应该阻止游戏逻辑的更新,而不是改变它的值来"模拟"暂停状态。
我的意思是你应该有如下内容:
void updateLogic() {
if (!isPaused) {
for (each entity) {
update position according to speed
}
}
}
void keyPressed(KeyEvent evt) {
int key = evt.getKeyCode();
if (key == KeyEvent.VK_SPACE) {
isPaused = !isPaused;
}
}
public boolean isPlaying = true;
if ( key == KeyEvent.VK_SPACE){
if(!isPlaying) {
dog.setSpeed(dogSpeed);
ball.setXspeed(xBallSpeed);
ball.setYspeed(yBallSpeed);
isPlaying = true;
}
else {
dog.setSpeed(0);
ball.setXspeed(0);
ball.setYspeed(0);
isPlaying = false;
}
}
这两种方法都有效。将速度设置为零并停止更新。然而,我找到了另一个更好的解决方案。在我的程序中,我有一个计时器:
timer = new Timer(t, new GameMotion());
timer.start();
所以我只是开始和停止定时器当我按空格。您可以看到旧代码被注释掉了。两种方法都有效。
谢谢大家。谢谢你的帮助。
if (isPlaying == true) {
if (key == KeyEvent.VK_LEFT) {
dog.setSpeed(-dogSpeed);
}
if (key == KeyEvent.VK_RIGHT) {
dog.setSpeed(dogSpeed);
}
//xBallSpeed = ball.getXballSpeed();
//yBallSpeed = ball.getYballSpeed();
}
if (key == KeyEvent.VK_SPACE ){
isPlaying = !isPlaying;
}
if (key == KeyEvent.VK_SPACE && !isPlaying) {
timer.stop();
//ball.setXspeed(0);
//ball.setYspeed(0);
}
else if (key == KeyEvent.VK_SPACE && isPlaying ){
//ball.setXspeed(xBallSpeed);
//ball.setYspeed(yBallSpeed);
timer.start();
}
"