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

时间:2014-03-18 04:38:48

标签: java keylistener

我正在用Java做作业,这是一款游戏。我想让用户选择暂停游戏。我试图做的是使用KeyListeners。所以,在keyPressed游戏停止。

现在如何使用相同的按钮重新开始游戏。

这是我的代码:

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中停止和启动某些事件?

3 个答案:

答案 0 :(得分:3)

这不是解决问题的好方法。暂停应该停止游戏逻辑更新,而不是更改其值以“模拟”暂停状态。

我的意思是你应该有以下内容:

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;
    }
}

答案 1 :(得分:2)

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;
            }
          }

答案 2 :(得分:0)

这两种方法都有效。将速度设置为零并停止更新。 然而,我找到了另一个更好的解 在我的程序中,我有一个计时器: 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();
                }

`