如何在Java中停止和启动某些操作?如何暂停和继续运动



我正在做一个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();
                }

"

最新更新