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