2015-01-03 249 views
1

我正在寫一個俄羅斯方塊克隆。我想使碎片落在一點點每60秒後速度更快,爲此我使用的是ScheduledExecutorService暫停和恢復ScheduledExecutorService

executor.scheduleAtFixedRate(new Runnable() { 
    @Override 
    public void run() { 
     levelUp(); 
    } 
}, 60, 60, TimeUnit.SECONDS); 

現在,我可以暫停遊戲,並同時暫停遊戲顯然停止做任何事情,直到我恢復它。就像現在一樣,暫停這場比賽是很好的,除了這位執行者負責「升級」之外,所有的都是這樣。例如,如果我玩了50秒,暫停遊戲一分鐘,恢復並再玩10秒,我會在2級,而我應該在1級(我們從0級開始)。有沒有辦法暫停恢復執行人?

請注意,暫停時暫時不升級是不夠的:如果我玩50秒,然後暫停20秒然後恢復,那麼在升級之前我必須再玩50秒,而不是假設的10秒。

那麼,有沒有辦法暫停和恢復ScheduledExecutorService

回答

0

看看thisthis問題。默認情況下,不支持暫停和恢復ScheduledExecutorService,它只是可以停止。你必須玩任務的時間安排。

+0

這兩個問題都沒有回答我的問題,但如果無法完成,我想我將不得不使用計劃。 –

+0

'ScheduledExecutorService'這種方式不太靈活,所以我會以不同的方式執行自己的調度,但仍然使用'ScheduledExecutorService'來運行一次性計劃任務。始終持有對下一個要執行的任務的引用,並且在出現暫停情況時,我會取消下一個'levelUp'任務的運行並保存剩餘時間直到執行。取消暫停時間只是安排一個新的'levelUp'任務與剩餘的時間。 – marczeeee

+0

是啊,已經做到了:) –