【问题标题】:Laggy empty project at 60FPS60FPS 的滞后空项目
【发布时间】:2015-08-05 13:58:16
【问题描述】:
@Override
public void create() {
batch = new SpriteBatch();
img = new Texture("badlogic.jpg");
}

@Override
public void render() {
Gdx.gl.glClearColor(0, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
if (x < 0 || x > 400) {
    speed = -speed;
}
x += speed * Gdx.graphics.getDeltaTime() * 60;
Gdx.app.log("delta",Gdx.graphics.getDeltaTime()+"");

batch.begin();
batch.draw(img, x, 0);
batch.end();
}

我遇到了一个问题,我创建了一个新项目。问题 libgdx 试图保持 60FPS 并且平均 deltatime 约为 16 毫秒。一些渲染需要 +20 毫秒,然后下一次渲染需要 12 毫秒(渲染 1 + 渲染 2 = 32 毫秒)才能达到 60 FPS。这让游戏变得迟钝。如您所见,我在项目中没有任何内容,并且在桌面启动中也是如此。你是怎么解决这个问题的?

注意:我也尝试了 reqeustRendering。但是如果渲染时间比平均时间长,那也是一样的。如果渲染时间小于 16 毫秒,我也尝试等待一段时间。它也没有帮助。它没有任何 GC 问题。我使用 Libgdx 1.6.4。

【问题讨论】:

  • 考虑使用固定时间步长,从而使游戏帧率独立:gafferongames.com/game-physics/fix-your-timestep
  • 以上代码与帧率无关。固定时间步长用于可重复的物理模拟,除非与插值相结合,否则实际上会引入口吃。关于最初的问题,我认为您正在做的事情没有任何问题。您是否看到不均匀的帧速率?尝试使用Gdx.graphics.getRawDeltaTime() 看看是否看起来不同。听起来您正在获得性能峰值,但这对于这样一个基本程序来说是不寻常的。
  • 我使用 rawDeltaTime 但它没有帮助。该精灵每 5 秒就会出现 2 或 3 秒的生涩。你用的是1.6.4版本吗?
  • 是的,我已经使用 1.6.4 几个星期了,没有发现任何延迟。
  • 可以分享一下游戏类代码吗?

标签: java android libgdx


【解决方案1】:

不要在渲染循环中记录输出

删除线 Gdx.app.log("delta",Gdx.graphics.getDeltaTime()+""); 因为这会将输出写入日志,这会显着减慢渲染循环。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-12
    • 2014-01-23
    • 2017-09-15
    • 2018-06-08
    • 2016-05-10
    • 1970-01-01
    • 2020-07-19
    • 2019-01-31
    相关资源
    最近更新 更多