我做了一个小“游戏”来测试我在实际游戏中注意到的一些口吃,我一生都无法弄清楚为什么会发生这种情况。我做了一个我能做的最简单的项目来测试这个,但我仍然很严重的口吃。 FPS仍然是60,但每隔几秒,有时更多,游戏就会卡顿。
我在手机和高端电脑上都试过了,奇怪的是,它在电脑上更明显,尽管它仍然出现在手机上。
我无法上传它的视频,因为它已经在录音中消失了,所以如果你想测试它,可以自己编译这个项目。这是代码:
public class LagTest extends ApplicationAdapter {
SpriteBatch batch;
Texture dot;
float x;
float y;
float speed;
float dotWidth;
int screenWidth;
@Override
public void create () {
batch = new SpriteBatch();
dot = new Texture("dot.png");
x = 100;
y = Gdx.graphics.getHeight()/2 - dot.getHeight()/2;
speed = 500;
dotWidth = dot.getWidth();
screenWidth = Gdx.graphics.getWidth();
}
@Override
public void render () {
Gdx.gl.glClearColor(0.2f, 0.4f, 0.8f, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
batch.begin();
batch.draw(dot, x, y);
batch.end();
if (x < 0) {
speed = 500;
}
if (x > screenWidth - dotWidth) {
speed = -500;
}
x += speed * Gdx.graphics.getDeltaTime();
}
}
如果有人对可能导致这种情况的原因有所了解,我会全力以赴。
编辑:
所以这里有一些有趣的事情。这似乎只发生在窗口模式下,而不是全屏模式。这也可能是它在移动设备上运行更好的原因。也许这是一个错误?
最佳答案
在尝试了一些不同的方法(平均增量/平均原始增量/使用原始增量/将帧速率降低到 30/每帧使用一组增量)后,每个方法都得到相同的口吃,然后在窗口模式下搜索一些口吃:
我想提导出吃不是由 LibGDX 本身引起的,而是在窗口模式下发生的一个普遍问题,并且可能有许多不同的硬件附近原因。有关示例和说明,请参见此处:https://gamedev.stackexchange.com/questions/47356/why-would-a-borderless-full-screen-window-stutter-occasionally
关于performance - 即使是最简单的项目也会口吃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32444865/