2014-09-12 51 views
1

有沒有什麼適當的方法來創建和顯示java中的定時器只使用java sdk和libGDX庫?Java libgdx創建和顯示StopWatch

我希望我的計時器從零開始,並以分鐘:秒的格式顯示。

我目前使用的解決方法,如在渲染方法中添加增量時間,並將totalTime/60轉換爲分鐘的整數,totalTime - minutes * 60秒。

在此之前,我已經嘗試將增量添加到秒,並且在呈現方法中將秒設置爲0,並且在秒> = 59.9f時將分鐘增加1。這兩種方法都非常低效,而且不太準確。我的計時器在接近一分鐘結束時跳過秒或顯示60秒,然後增加分鐘並重置秒,如1:59,1:60和2:00。

我搜索了所有的文件和互聯網,並沒有找到一種方法來正確顯示時間(沒有解決方法,有巨大的缺陷)。你怎麼能以專業的方式做到這一點?

我不認爲AAA遊戲會認真對待這些東西......有人甚至認爲人們可能需要類似java中或libGDX中的倒數計時器(一個工作不顯示1:60的東西)?

回答

4

這是一種難以完全遵循你所嘗試的,所以我不確定你失去了準確性的位置,但也許它與你在計算中放置整型數據的位置有關。

通常一個時鐘會顯示完整的秒數,所以整個時間總計爲一個整數。分鐘和秒應該每幀重新計算。除了顯示totalTime的人類可讀版本之外,它們沒有任何用處,所以不需要將它們保留在成員變量中。 totalTime應該保持不動,以保持準確。

//Member variable: 
float totalTime = 5 * 60; //starting at 5 minutes 

void render(){ 
    float deltaTime = Gdx.graphics.getDeltaTime(); //You might prefer getRawDeltaTime() 

    totalTime -= deltaTime; //if counting down 

    int minutes = ((int)totalTime)/60; 
    int seconds = ((int)totalTime) % 60; 

    //... 
} 
+0

我也會試試。直到現在,我使用秒作爲浮點數:'秒=總時間 - 分鐘* 60;' – Andrew 2014-09-12 14:42:33

+0

這解釋了你有舍入問題。因爲我們只是想顯示一個整數,所以它是這個工作最簡單的工具。 – Tenfour04 2014-09-12 18:24:19

0

對於我NoThree比賽,我打印計時器如下:

 gameTime += delta; 
     float minutes = (float)Math.floor(gameTime/60.0f); 
     float seconds = gameTime - minutes * 60.0f; 
     labelTime.setText(String.format("%.0fm%.0fs", minutes, seconds)); 

我覺得它工作得很好。