【发布时间】: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 几个星期了,没有发现任何延迟。
-
可以分享一下游戏类代码吗?