2011-08-05 44 views
0

目前我正在開發一組簡單的Java遊戲(用JavaFX2作爲GUI)。剛纔我遇到了「可定時器」的需要。有沒有人知道一個圖書館的遊戲時間,使我可以暫停計時器而無需自己實施?用於實施倒計時和固定費率的事情。Java遊戲:暫停/恢復可能性的時機

我需要: - 時間表TimerTasks以特定速率(那已經是JDK) - 時間表TimerTasks具有固定延遲 - 暫停計時器 - 恢復定時器,以便在那裏我暫停其一切開始。

如果有人知道這樣的話,這將是非常酷的。

謝謝。

回答

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類的公共靜態變量。

也許這種方法甚至不適用於你的遊戲,你有一些理由需要更準確的暫停,但如果沒有,希望這有助於!

+0

它不是關於它運行的事實,而是關於時間的更多信息。我需要能夠告訴計時器已經在遊戲中的每一點運行了多久。我需要暫停一個計時器,然後在所有時間恢復正確的值。 –

0

你可能要採取AA看看石英休眠方法 -

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是一個很好的框架,你可以插件到您的應用。它也是高度可定製的,所以你可以利用它。