LibGDX游戏突然出现卡顿?

3

最近我开始了一个新的LibGDX项目。我非常习惯使用它。但是在这个项目中(以及我最近设置的每个新项目),卡顿很多。尽管FPS很好,但对象的移动却是卡顿的。我尝试打开和关闭垂直同步,但并没有什么帮助。为什么突然间会出现这种情况?我有什么遗漏吗?

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%存在。目前我正在使用最新版本1.9.10的LibGDX。另外,我上一次项目时硬件没有更改。


你正在直接操作精灵的位置。你尝试过使用速度变量来进行操作吗?这样可以使移动更加平滑。 - Niko
我不认为这会影响渲染。我的意思是,我有一个恒定速度的更新,这应该没问题吧?如果我引入了一个速度变量,当它达到最大值时,它将等于固定更新。 - mrdlink
你也播放一些声音吗? - MilanG
看一下上面的代码,除了渲染单个精灵和文本之外,没有其他操作。 - mrdlink
1
你有解决这个问题吗?即使所有的东西都关闭了,它似乎仍然会出现卡顿...除引擎本身之外,没有任何原因可以导致它。 - Hasen
这里也有同样的问题。有什么解决方法吗? - ceklock
1个回答

0
float getDeltaTime() 

该值被“平滑化”或平均化了一定数量的帧,因此它并不能正确地显示自上一帧以来经过的实际时间,因此x增量并不真正匹配帧间隔。

float getRawDeltaTime()

这将特别显示最后一帧的增量,并消除卡顿。


谢谢你的回答。我会尝试使用原始增量时间来看看是否可以解决我的问题。但是平滑增量时间的目的是什么呢? - mrdlink
好问题,为什么呢?本质上是为了解决缺陷。这种平滑只针对Android设备,这是libGDX的初始目标,旨在纠正由早期Android设备造成的间歇性巨大渲染问题与其他地方的执行时间渲染假设相结合所导致的问题。更多细节请参见https://github.com/libgdx/libgdx/issues/6228。 - londonBadger

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接