2013-02-09 58 views
0

我必須處理一些對象的動畫。現在我已用4種方法完成它:getAnimationCooldown(),resetAnimationCooldown(),subAnimationCooldown()nextFrame()如何在固定時間間隔內調用方法(無線程)

但肯定有更簡單的方法來做到這一點。我想每100ms調用一次方法nextFrame()。是否有捷徑可尋?我知道ScheduledExecutorTimer,但我看到他們爲此任務創建了新線程,我需要在此循環中的每個對象的for()循環中調用此方法。所以,有一些簡單的方法,只是把它想:

for (Object object : objects) { 
every(100, TimeUnit.MILISECONDS) { 
    object.nextFrame(); 
} 
} 
+0

如何創建一個計時器,每隔100 ms迭代所有對象? – harpun 2013-02-09 11:41:36

+0

它應該在這個循環中完成,因爲它只能動畫提供動畫接口的對象。當然,我可以做第二個線程,但它會浪費權力,第二次interate所有對象,我想.. – 2013-02-09 11:43:24

+1

不會在此循環中調用'Thread.sleep(200)'足夠? – harpun 2013-02-09 11:45:58

回答

1

一對夫婦的想法是:

第一:是否有可能反轉調用nextFrame每100ms的要求?如果是這樣,它可能會變成「儘可能經常呼叫nextFrame,&對象將更新適當的時間量爲,因爲它的最後一個nextFrame」?你仍然需要經常調用它,但是這會消除以精確的100ms間隔調用nextFrame的壓力。

有了這樣的想法,你的主循環會對待每一個你提到的行動,這樣的:

while(!isGameOver()) { 
    moving(); 
    shooting(); 
    for (Object object : objects) { 
    object.nextFrame(); 
    } 
} 

二:切換到完全事件驅動模型,但要注意「內而外邏輯「這種模式的危險。

相關問題