Java中的游戏:可能暂停/恢复的时间

时间:2011-08-05 22:18:46

标签: java timer timing

目前我正在为Java开发一套简单的游戏(使用JavaFX2作为GUI)。刚才我遇到了“可定时计时器”的需要。有没有人知道一个游戏时间库让我能够在没有自己实现的情况下暂停计时器?用于实施倒计时和固定利率的事情。

我需要:   - 以特定速率安排TimerTasks(已经在JDK中)   - 安排具有固定延迟的TimerTasks   - 暂停计时器   - 恢复计时器,以便一切都从我暂停的地方开始。

如果有人知道这样的话会很酷。

感谢。

2 个答案:

答案 0 :(得分:3)

我很确定JDK中没有任何内容可以做到这一点,而且我不知道有任何库可以做到这一点。

但是,我认为不应该尝试暂停和恢复某种计时器,而应该简单地包装任何依赖于在条件中定期执行的内容,以便它只在未暂停时执行。如果安排任务的速度足够快,则用户不应注意到差异。例如:

public abstract class PausableTask extends TimerTask {
  private final AtomicBoolean isPaused;

  public PausableTask(AtomicBoolean flag) {
    isPaused = flag;
  }

  @Override public final void run() {
    if (!isPaused.get()) go();
  }

  public abstract void go();
}

然后你可以有一个全局暂停标志,并且每次使用TimerTasks时,都要使用这个类,传递全局标志。您甚至可以将该标志设置为PausableTask类的公共静态变量。

也许这种方法甚至不适用于你的游戏,你有理由需要更准确的暂停,但如果没有,希望这会有所帮助!

答案 1 :(得分:0)

您可能需要查看Quartz Standby方法 -

http://www.quartz-scheduler.org/docs/api/1.8.1/org/quartz/Scheduler.html#standby()

来自API -

Temporarily halts the Scheduler's firing of Triggers.

When start() is called (to bring the scheduler out of stand-by mode), trigger misfire instructions will NOT be applied during the execution of the start() method - any misfires will be detected immediately afterward (by the JobStore's normal process).

The scheduler is not destroyed, and can be re-started at any time.

Quartz是一个非常好的框架,可以插入到您的应用程序中。它也是高度可定制的,因此您可以使用它。