簡體   English   中英

Libgdx如何計算經過的時間

[英]Libgdx how to calculate elapsed time

我試圖通過在render方法中將delta的值添加到我的浮點值來計算libgdx中的已用時間,浮點值是自播放狀態開始以來我測量的時間。 錯誤或問題,你想如何調用它,是通過我的計算,顯示的時間是實時的兩倍。 我試圖除以2並且我非常接近實時,這意味着通過在每次渲染調用中添加delta我幾秒鍾內都無法獲得實時。 為什么會這樣?

private float time=0;
public void render () {
    time +=Gdx.graphics.getDeltaTime();
}

上面沒有得到實時,我的問題是為什么? 編輯:我正在使用屏幕,但無所謂我嘗試了Gdx.graphics.getDeltaTime()和渲染方法的delta參數。

您可以使用包裝器TimeUtils。

獲取當前時間:

long startTime = TimeUtils.millis();

從startTime開始經過的時間:

long elapsedTime = TimeUtils.timeSinceMillis(startTime);

LibGDX仍然是Java的核心,只需使用標准方法來獲取時間。 在應用程序使用開始時

startTime = System.currentTimeMillis();

然后在渲染中你可以做到

System.out.println("Time elapsed in seconds = " + ((System.currentTimeMillis() - startTime) / 1000));

確保將startTime聲明為long。

至於為什么它沒有使用你發布的方法,我不確定。

編輯:如果您的LibGDX項目未設置為以固定速率運行,則幀速率更改將導致Gdx.graphics.getDeltaTime()發生更改,因為更新的最后一幀返回增量時間。

為什么不從標准java庫中獲取系統時間戳。 在啟動應用程序時以及當您想要計算經過時間時,請從當前時間減少該初始值。

long startTime = System.currentTimeMillis();

然后每當你想要獲得經過的時間時:

long elapsed time = System.currentTimeMillis() - startTime;

我不認為添加delta是非常准確的,因為在libgdx停止測量delta和再次啟動之間可能會有一些時間丟失,在這種情況下它會隨着時間的推移而漂移。

不知道為什么你得到的速度快了兩倍......我知道渲染調用每秒被調用60次。 也許三角洲以某種方式考慮每秒30幀......

順便說一句,還有getRawDeltaTime()這應該會給你更准確的東西。

更新:正如Christian評論的那樣 - 你需要除以1000來得到秒的分辨率而不是毫秒。

TimeUtils是可移植性所必需的。 如果您計划在多個平台上進行部署,請避免使用系統類。 由於這個原因,LibGdx也有自己的數組類。

例:

public long time;
time = TimeUtils.nanoTime();

來自維基:

類TimeUtils“System.nanoTime()和System.currentTimeMillis()周圍的包裝。如果你想在所有平台上兼容,請使用它!”

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM