【发布时间】:2026-01-29 12:55:01
【问题描述】:
我正在尝试使用 libGDX 制作游戏,其中游戏角色将在屏幕上水平移动。我使用以下代码制作了一个示例,并在手机(宽度较小)和平板电脑(宽度较大)上进行了测试。演员在手机中的移动和消失速度比在平板电脑中更快。我该如何解决这个问题?
public class SpriteMoveTestGame extends Game {
private MyScreen screen;
@Override
public void create() {
screen = new MyScreen();
setScreen(screen);
}
@Override
public void dispose() {
}
private class MyActor extends Actor {
private Texture texture;
private float x;
public MyActor() {
texture = new Texture(Gdx.files.internal("badlogic.jpg"));
x = 0.0f;
}
@Override
public void act(float delta) {
super.act(delta);
}
@Override
public void draw(Batch batch, float parentAlpha) {
super.draw(batch, parentAlpha);
Gdx.gl20.glClear(GL20.GL_COLOR_BUFFER_BIT);
Gdx.gl20.glClearColor(0, 1, 0, 0);
batch.draw(texture, x, 200);
x += 4.5f;
}
}
private class MyScreen extends ScreenAdapter {
private Stage stage;
private FitViewport fitViewport;
private MyActor actor;
public MyScreen() {
stage = new Stage();
actor = new MyActor();
stage.addActor(actor);
}
@Override
public void render(float delta) {
super.render(delta);
stage.act();
stage.draw();
}
}
}
【问题讨论】:
-
您使用的是不带摄像头的 fitviewport,因此它仅取决于屏幕分辨率。所以如果手机有800宽度分辨率(比如),桌子有1080,在手机上会更快到达屏幕边缘。您需要使用一个相机(OrthographicCamera),它会告诉 libgdx 您希望始终独立于屏幕显示多少像素/单位,并且为避免出现划痕,请使用 ExtendViewport 而不是 Fitviewport。
-
不相关,但不要将 glclear 调用放在你的演员中。这会清除整个屏幕,因此游戏或屏幕只能执行一次,而不是演员内部。
-
@OscarO。能否提供示例代码?
-
我不知道他们怎么知道你使用的是什么类型的视口。尽管如此,听起来您正在错误地使用视口。 LibGDX wiki 中有很多示例,或者您可以向我们展示您使用视口的代码,我们可以告诉您它有什么问题。
-
@Tenfour04 在他发布的示例代码中使用了 FitViewport
标签: java android libgdx screen