Performance 即使是最简单的项目也会结巴

Performance 即使是最简单的项目也会结巴,performance,libgdx,Performance,Libgdx,我做了一个小“游戏”来测试我在实际游戏中注意到的一些口吃,但我一辈子都不明白为什么会发生这种情况。我做了一个尽可能简单的项目来测试这一点,但我仍然有相当严重的口吃。FPS仍然是60,但每隔几秒,有时甚至更多,游戏就会结巴 我在手机和高端pc上都试过,奇怪的是,它在pc上更引人注目,尽管它仍然出现在手机上 我不能上传它的视频,因为它已经在录音中消失了,所以如果你想测试它,可以自己编译这个项目。代码如下: public class LagTest extends ApplicationAdapter

我做了一个小“游戏”来测试我在实际游戏中注意到的一些口吃,但我一辈子都不明白为什么会发生这种情况。我做了一个尽可能简单的项目来测试这一点,但我仍然有相当严重的口吃。FPS仍然是60,但每隔几秒,有时甚至更多,游戏就会结巴

我在手机和高端pc上都试过,奇怪的是,它在pc上更引人注目,尽管它仍然出现在手机上

我不能上传它的视频,因为它已经在录音中消失了,所以如果你想测试它,可以自己编译这个项目。代码如下:

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();
    }
}
公共类LagTest扩展了ApplicationAdapter{
喷雾批;
纹理点;
浮动x;
浮动y;
浮动速度;
浮动点宽度;
int屏幕宽度;
@凌驾
公共void创建(){
批次=新的SpriteBatch();
点=新纹理(“dot.png”);
x=100;
y=Gdx.graphics.getHeight()/2-dot.getHeight()/2;
速度=500;
dotWidth=dot.getWidth();
screenWidth=Gdx.graphics.getWidth();
}
@凌驾
公共无效渲染(){
Gdx.gl.glClearColor(0.2f、0.4f、0.8f、1);
Gdx.gl.glClear(GL20.gl\u颜色\u缓冲\u位);
batch.begin();
批次图(点、x、y);
batch.end();
if(x<0){
速度=500;
}
如果(x>屏幕宽度-点宽度){
速度=-500;
}
x+=speed*Gdx.graphics.getDeltaTime();
}
}
如果有人知道这是什么原因,我洗耳恭听

编辑:


所以这里有一些有趣的事情。这似乎只在窗口模式下发生,而不是在全屏模式下。这也可能是它在移动设备上工作得更好的原因。那么,这可能是一个错误?

在尝试了一些不同的方法(平均增量/平均原始增量/使用原始增量/将帧速率降低到30/每帧使用一组增量)后,在每一帧上获得相同的口吃,然后在窗口模式下搜索一些口吃:


我想提出的是,口吃不是由LibGDX本身引起的,而是在窗口模式下发生的一个普遍问题,可能有许多不同的硬件原因。请参见此处的一个示例和解释:

不确定这是否是原因,但由于在调用
draw()
后没有使用
batch
,因此您应该立即结束调用,通常最好先更新,然后再绘制(您的操作正好相反)啊,当然。这不是导致它的原因,但无论如何我都会编辑代码。你可以打开GC日志记录并检查它是否是GC。我不认为这是垃圾收集,但我可以尝试一下。如何启用垃圾收集日志记录?