Игры на Java: синхронизация с возможностью паузы / возобновления - PullRequest
0 голосов
/ 06 августа 2011

В настоящее время я занимаюсь разработкой набора простых игр для Java (с JavaFX2 в качестве GUI). Просто сейчас я столкнулся с необходимостью «паузных таймеров». Кто-нибудь знает библиотеку для определения времени игры, которая позволяет мне останавливать таймеры, не применяя ее самостоятельно? Для осуществления отсчетов и вещей с фиксированной скоростью.

Мне нужно: - планировать TimerTasks с определенной скоростью (это уже в JDK) - расписание TimerTasks с фиксированной задержкой - приостановить таймер - возобновить таймеры, чтобы все начиналось с того места, где я остановился.

Было бы здорово, если бы кто-то знал что-то подобное.

Спасибо.

Ответы [ 2 ]

3 голосов
/ 06 августа 2011

Я почти уверен, что в 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.

Может быть, этот подход даже не применим к вашей игре, и у вас есть основания требовать более точной приостановки, но если нет, надеюсь, это поможет!

0 голосов
/ 06 августа 2011

Возможно, вы захотите взглянуть на метод кварцевого ожидания -

http://www.quartz -scheduler.org / документы / API / 1.8.1 / орг / кварц / Scheduler.html # в режиме ожидания ()

Из 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 - это очень хороший фреймворк, который вы можете подключить к своему приложению. Он также легко настраивается, поэтому вы можете использовать его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...