2016-09-30 50 views
0

背景安卓遊戲計時器:在60fps運行時,計數10毫秒(16.66ms)

我開發一個的Android遊戲到我加入一個「速度」模式 - 在這裏,而不是高分,玩家將盡可能以最快的速度完成任務 - 時間越短,排行榜越高。

問題

現在,這是寫在OpenGL ES 2.0的遊戲 - 它運行以每秒60個蜱(遊戲邏輯更新),並呈現一樣快,該裝置可以處理。它使用固定的增量時間(1f/Ticks_Per_Second)。

基本上,每個遊戲tick都會每16.66ms發生一次,但我需要計數並顯示釐秒(10ms) - 如何?

如果我舉一個變量,這樣說:

timePassed++; //Increase this each tick 

再經過1秒(60個刻度),我會只數到60,我可以解決這個問題,像這樣:

timePassed+=1.666666666666667; 

現在1秒後,timePassed = 100(這最終是我想要的)。然後,我可以通過除以100並截斷到2個小數位獲得實際時間。 (或者只是將它用作百分之一秒,並在秒和分鐘中使用單獨的變量)。每一次滴答,我也會做出這樣的改變。

這樣做的問題是,我總是會被「跳過」一些值,因爲我只更新每秒60次 - 而不是100。

系統定時器

我也可以搶以毫秒或納秒爲單位的時間,然後當遊戲結束時,再次抓住並找出差異,但是,我預見到類似的問題,因爲我只是每隔60秒查詢一次差異。同樣,我可以在另一個線程上運行計時器,但是,我只能以1/60秒的倍數來查詢計時器。

希望我已經解釋了這個問題,如果需要更多的信息,請詢問。

+0

我不太明白 - 如果遊戲時間爲1.345645343秒,是不是時間爲領導董事會?爲什麼它必須考慮'蜱'?如果我忽略了你所說的話,我很抱歉。 – brandall

+0

@brandall,嗨,讓我們說(只是爲了讓事情變得非常簡單),某人需要秒/ 100秒才能完成一項任務,當我將時間增加1.666667時,如何計算並顯示00.00.02每個滴答聲?希望我有道理!它會從1.6到3.2? - 希望是有道理的:-) – Zippy

+0

我可能不得不摒棄這個問題 - 我仍然不明白爲什麼你不要完全放棄你的等式中的剔號並且根據實際經過的時間來計算時間...... 。?遊戲完成的那一刻,如果你停止這個計時器(基於系統納秒時間),是不是所花費的時間?!我再次道歉,如果我錯過了這一點,但我認爲其他人閱讀你的問題可能會謎題? – brandall

回答

0

IMO的第一種方法不是很可靠,因爲你正在計算幀而不是時間。我會使用系統計時器,並嘗試從渲染中解耦遊戲邏輯。所以,你將有:
核心邏輯 - >生成領袖板上每隔10ms
渲染 - > 16ms的每

+0

我的遊戲邏輯和渲染已經解耦 - 我的渲染髮生在設備可以處理的很多幀上,並且Logic的上限爲每秒60次迭代,您能否詳細說明您的想法@DavideBianco?謝謝 – Zippy