2013-10-31 119 views
3

我是一個初學者,我想在LibGDX如何限制幀率爲50或60的完整示例。 deWiTTERS遊戲循環:deWiTTERS遊戲循環在LibGDX

@Override 
public void render() 
{ 
    float deltaTime = Gdx.graphics.getDeltaTime(); 
    Update(deltaTime); 
    Render(deltaTime); 
} 

有一個Gdx.graphics.setVsync()方法(通用=後端-獨立的),但它不存在於0.9.1,只有在Nightlies版。

「依靠垂直同步的固定時間步長是一個非常糟糕的主意。這會打破幾乎所有的硬件在那裏。

見LwjglApplicationConfiguration,那裏面有一個標誌,讓我們的使用切換GPU /軟件vsynching。玩吧。「 (Mario)

請注意,這些都不會限制幀率到一個特定的值......如果您真的需要限制幀速率出於某種原因,您必須通過從渲染調用返回來處理它,如果xxx ms自上次呈現調用以來沒有通過。

+0

爲什麼你不使用nightlies?或者至少比0.9.1更新?實際上,夜牀睡得很穩。 – noone

回答

5

作爲LibGDX的完整遊戲引擎,它可以處理像這樣的事情。您可以在遊戲開始時進行配置,至少在最近的夜晚。

public static void main(String[] args) { 
    LwjglApplicationConfiguration cfg = new LwjglApplicationConfiguration(); 
    cfg.title = "Example"; 
    cfg.useGL20 = false; 
    cfg.width = 800; 
    cfg.height = 480; 
    cfg.vSyncEnabled = true; 
    cfg.foregroundFPS = 60; 

    new LwjglApplication(new ExampleGame(), cfg); 
} 

現在,您的渲染循環將被限制爲每秒60次調用。至於實際的實施,你應該使用GameScreens。該Screen接口上已經有render方法,它可能是這樣的:

public void render(deltaTime) 
{ 
    ... 
    updateAllEntities(deltaTime); 
    ... 
    renderAllEntities(deltaTime); 
    ... 
} 

,唯一的render方法,通過LibGDX被調用,但是你可以分散你的遊戲邏輯更新,並在上面的例子中自己繪製喜歡。

+1

好的告訴我,在AndroidApplicationConfiguration的情況下,我如何達到相同。 –

+0

@jay_singh查看https://github.com/libgdx/libgdx/wiki/Starter-classes-%26-configuration以及https://github.com/libgdx/libgdx/wiki/Project-setup% 2C-running-%26-debugging#using-libgdx-setup在開始設置所有項目時可以節省大量時間,並且它很容易擴展。 Android配置的工作原理是一樣的 – noone

+0

@jay_singh哦,我只是注意到你不能通過AndroidAppConfig來配置它。我想這是因爲智能手機無論如何都有FPS的內部限制(以節省能源)。我的谷歌Nexus S例如自動停止在60FPS – noone