LibGDX中的deWiTTERS游戏循环

jay*_*ngh 4 android libgdx

我是初学者,我想在LibGDX中有一个完整的例子如何将帧速率限制为50或60.另外如何在游戏状态与简单示例代码之间进行漫画插值,例如deWiTTERS Game Loop:

@Override
public void render()
{
    float deltaTime = Gdx.graphics.getDeltaTime();
    Update(deltaTime);
    Render(deltaTime);
}
Run Code Online (Sandbox Code Playgroud)

有一个Gdx.graphics.setVsync()方法(generic = backend-independant),但它不存在于0.9.1中,仅存在于Nightlies中.

"依赖于vsync的固定时间步骤是一个非常糟糕的主意.它将打破几乎所有的硬件.

请参阅LwjglApplicationConfiguration,其中有一个标志,让我们使用切换gpu /软件vsynching.玩弄它."(马里奥)

请注意,这些都不会将帧速率限制为特定值...如果由于某种原因您真的需要限制帧速率,则必须通过从渲染调用返回来自己处理它,如果xxx ms自上次没有通过渲染电话.

noo*_*one 6

作为LibGDX的完整游戏引擎,它处理这样的事情本身.您可以在游戏开始时配置此功能,至少使用最新的nightlies.

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);
}
Run Code Online (Sandbox Code Playgroud)

现在,渲染循环将限制为每秒60次调用.至于实际的实现,你应该使用GameScreens.该Screen接口已经有一个render方法,可能如下所示:

public void render(deltaTime )
{
    ...
    updateAllEntities(deltaTime);
    ...
    renderAllEntities(deltaTime);
    ...
}
Run Code Online (Sandbox Code Playgroud)

只有renderLibGDX调用的方法,但您可以像上面的示例一样自行拆分游戏逻辑更新和渲染.