Java LibGDX游戏突然结巴了?

Java LibGDX游戏突然结巴了?,java,performance,libgdx,Java,Performance,Libgdx,最近我开始了一个新的LibGDX项目。我已经习惯了和它一起工作。但是这个项目(以及我最近建立的每一个新项目)让我口吃很多。虽然FPS很好,但对象的移动却很不连贯。我试着打开和关闭vsync,但没有多大帮助。这怎么可能突然发生?我错过什么了吗 public class Run { public static void main(String[] args) { var config = new LwjglApplicationConfiguration();

最近我开始了一个新的LibGDX项目。我已经习惯了和它一起工作。但是这个项目(以及我最近建立的每一个新项目)让我口吃很多。虽然FPS很好,但对象的移动却很不连贯。我试着打开和关闭vsync,但没有多大帮助。这怎么可能突然发生?我错过什么了吗

public class Run {
    public static void main(String[] args) {
        var config = new LwjglApplicationConfiguration();
        config.title = "MyGame";
        config.width = 1280;
        config.height = 800;

        new LwjglApplication(new MyGame(), config);
    }
}

public class MyGame extends Game {

    public void create() {
        this.setScreen(new MainScreen());
    }

    public void dispose() {

    }
}

public class MainScreen extends ScreenAdapter {

    private BitmapFont font = new BitmapFont();
    private SpriteBatch batch = new SpriteBatch();

    private OrthographicCamera camera = new OrthographicCamera();
    private FitViewport viewport = new FitViewport(1280, 800, camera);

    private Sprite sprite = new Sprite(new Texture(Gdx.files.internal("some sprite")));

    public void show() {
        batch.setColor(Color.WHITE);
    }

    public void render(float delta) {
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

        if(Gdx.input.isKeyPressed(Input.Keys.D)) {
            sprite.setX(sprite.getX() + 150 * Gdx.graphics.getDeltaTime());
        }
        if(Gdx.input.isKeyPressed(Input.Keys.A)) {
            sprite.setX(sprite.getX() - 150 * Gdx.graphics.getDeltaTime());
        }

        viewport.apply();
        batch.setProjectionMatrix(camera.projection);
        batch.begin();
            font.draw(batch, "Hello LibGDX!", 100f, 100f);
            sprite.draw(batch);
        batch.end();
    }

    public void resize(int width, int height) {
        viewport.update(width, height);
    }

    public void dispose() {
        font.dispose();
        batch.dispose();
    }
}
这是我设置的最基本的项目,以确认口吃在100%的时间内都存在。目前我使用的是LibGDX的最新版本1.9.10。顺便说一句,自从我完成上一个项目以来,我的硬件没有改变

float getDeltaTime() 
该值在多个帧上被“平滑”或平均,因此它不能正确显示自上一帧以来的实际运行时间,因此x增量与帧增量不匹配

float getRawDeltaTime()

这确实显示了最后一帧的特定增量,并将消除口吃。

您正在直接操纵精灵的位置。您是否尝试过使用速度变量,而该变量会被操纵?这会导致整体的平滑运动。我不认为这会对渲染产生什么影响。我的意思是我有一个恒定速度的更新,这不是很好吗?如果我引入一个velocity变量,当它达到最大值时,它将等于固定更新。你也播放一些声音吗?看看上面的代码。没有什么比渲染一个精灵加上一个文本更有效的了。你有没有修复过这个问题?即使一切都关闭了,它似乎也会口吃……除了发动机本身之外,似乎没有其他原因导致它。谢谢你的回答。我将尝试使用原始增量时间,看看它是否解决了我的问题。但是平滑的三角洲时间的目的是什么呢?好问题,为什么呢?基本上是对缺陷的修复。这种平滑仅适用于作为libGDX初始目标的Android设备,以纠正早期Android设备造成的问题,这些设备具有间歇性的巨大渲染问题,与其他地方的限制delta时间渲染假设不符。有关更多详细信息,请参见此。