簡體   English   中英

Java游戲緩慢更新幾秒鍾

[英]Java game slow update for a few seconds

我正在制作一個生命游戲克隆,(你知道,只是為了好玩)而且我對更新(tick)方法有點問題。

這是更新和渲染循環:

while (running) {
    double nsTick = 1000000000 / amountOfTicks;

    long now = System.nanoTime();
    deltaRender += (now - lastTime) / nsRender;
    deltaTick += (now - lastTime) / nsTick;
    lastTime = now;

    while (deltaRender >= 1){
        render();
        frames++;
        deltaRender--;

        if (tickRunning) {
            while(deltaTick >= 1) {
                tick();
                ticks++;
                deltaTick--;
            }
        }

        if (System.currentTimeMillis() - timer > 1000){
            timer += 1000;
            System.out.println("Ticks: " + ticks);
            frames = 0;
            ticks = 0;
        }
    }
}

stop();

正如您所看到的,我將渲染和刻度函數分開,因為刻度的速率由用戶實時控制。

問題在於,當游戲開始時(或未被暫停),tick會在幾秒鍾內(大約10秒)具有不穩定的更新速率,然后調整到正確的更新速率。 可以修復嗎?

該游戲目前在單個線程上運行。

問題似乎是當你暫停游戲時,你仍在計算你必須執行的tick() s(也就是說, deltaTick繼續增加); 並且當游戲恢復時,這些堆積的tick() s不會立即執行。 這里有多種解決方案; 當游戲暫停時,一個是暫停增加deltaTick

if (tickRunning) {
    deltaTick += (now - lastTime) / nsTick;
}

另一種方法是在恢復或開始游戲時簡單地將deltaTick設置為0

等等,我做了一些不同的工作(也許這就是你的意思)。 這是代碼:

while(deltaTick >= 1){
   deltaTick--;
   if(tickRunning){
       tick();
       ticks++;         
   }
}

從時間上看,鼠標有點反應遲鈍,但我認為之前有過。 非常感謝!

暫無
暫無

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

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