4

我是初学者,我想要一个完整的 LibGDX 示例,如何将帧速率限制为 50 或 60。此外,如何使用简单的示例代码在游戏状态之间进行插值,例如 deWiTTERS 游戏循环:

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

有一个 Gdx.graphics.setVsync() 方法(通用 = 后端独立),但它不存在于 0.9.1 中,仅存在于 Nightlies 中。

“依靠 vsync 进行固定时间步长是一个非常糟糕的主意。它会破坏几乎所有硬件。

请参阅 LwjglApplicationConfiguration,那里有一个标志,可以让我们使用切换 gpu/软件 vsynching。玩弄它。”(马里奥)

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

4

1 回答 1

6

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 次调用。至于实际的实现,你应该使用 aGameScreens。该Screen接口已经有一个render可能如下所示的方法:

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

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

于 2013-10-31T06:44:02.543 回答