2009-06-18 47 views
1

我已經做了一系列關於J2ME遊戲開發的問題,並在最近一,尼爾·科菲評論時間效率Gameloop在J2ME

作爲一個邊issue--你真的想 做J2ME遊戲中的每秒100個ticks /秒? 正如我認爲某人已經提到的那樣,你應該真的睡到下一個 期望的喚醒點,而不是每個固定的持續時間。

出於某種原因,停留在我的腦海裏的那個東西,現在我想要的答案,我需要什麼,使我gameloop睡眠到期望喚醒點,我真的不知道在哪裏這點xD(理論上講)。

對於反饋的緣故,這是我gameloop的簡化版本:

public void run() { 
    Graphics g = this.getGraphics(); 
    while (running) { 
     long diff = System.currentTimeMillis() - lastLoop; 
     lastLoop = System.currentTimeMillis(); 
     input(); 
     this.level.doLogic(); 
     render(g, diff); 
     try { 
      Thread.sleep(10); 
     } catch (InterruptedException e) { 
      stop(e); 
     } 
    } 
} 

感謝您的幫助!

回答

1

如果決定要渲染每10毫秒,那麼你:

loop { 
    - record current time; render 
    - do input/logic 
    - check the current time, and calculate elapsed time 
    - if less than 10 ms has elapsed, calculate the remaining time (10 millis - elapsed time); sleep for this duration 
} 

據我所知,可能有計時器的分辨率問題(例如,的Thread.sleep(10)可以不睡覺正好10毫秒;而System.currentTimeMillis()可能不會返回粒度降至1毫秒的結果)。這取決於平臺。

3

如果您還沒有閱讀過關於遊戲循環here的優秀文章,

從我寫J2ME遊戲的經驗來看,你會希望儘量減少你在遊戲循環中做了多少事情,因爲寫得不好的遊戲循環可能會很快耗盡電話中不精確的電池。也就是說,如果你正在渲染10毫秒,請確保檢查是否有任何更改,如果沒有,請跳過它。