你好Android開發恆FPS的Android OpenGLES
我開發Android在Eclipse中使用OpenGLES 1.0一個簡單的遊戲。我使用三星Galaxy S2 Android(2.3)作爲開發設備。
我有一個關於雙核心,並使幀速率不變的問題。
所以我管理創建GLSurfaceView並重寫onDrawFrame()函數,我稱之爲LogicUpdate(deltatime)函數和Render()函數。
是的,現在都在單線程中。
我得到的問題是雙核心。如果我通過進入設置 - >節能並檢查系統省電功能來禁用雙核,我意識到渲染會自動鎖定在30 FPS。但是,如果我通過取消選中系統省電功能來啓用雙核心,我發現渲染被鎖定在60 FPS,但手機變熱,電池消耗非常快。
所以這個想法是讓我的遊戲運行在30 FPS節省一些電池。
所以要做到這一點,我使用代碼波紋管。
在我進行邏輯更新之前,我稱之爲代碼安寧,記得所有這些都在onDrawFrame()中完成。
if(CONST_FPS > 0 && StartTime > 0)
{
/////////////////////////////////////////////////////////////////
// Get frame time
////////////////////////////////////////////////////////////////
long endTime = System.currentTimeMillis();
long time = endTime - StartTime;
//
long wantedtime = 1000/CONST_FPS;
//
long wait = 0;
if(time < wantedtime)
{
wait = wantedtime - time;
//
Thread.sleep(wait);
}
else
{
//Time to big game will slow down
}
}
其中CONST_FPS = 30
然後
StartTime = System.currentTimeMillis(); //
UpdateLogic(1.0/CONST_FPS);
Render();
遊戲以每秒30幀非常流暢,主要是因爲它並不需要鎖定FPS。 但是,當試圖鎖定60FPS到30 FPS我會口吃。我做了一些研究,發現Thread.Sleep()並不精確。這是真的?當鎖定60FPS到30FPS時,我還能做些什麼來使遊戲更加流暢。
感謝您的回答...