我正在使用libgdx制作Android游戏,我希望游戏在不同的智能手机屏幕上看起来不错(比例相同),但不是成就。在一个设备中,图片看起来很正常,而另一个图片非常小。
我使用了视口和OrthographicCamera,但我没有看到好的结果。也许我做错了。
目前我有这段代码(摘录):
public class PlayScreen extends BaseScreen {
private Stage stage;
private FaceActor faceActor64;
private Texture faceTexture64;
private int sw;
private int sh;
public PlayScreen(MainGame game) {
super(game);
faceTexture64 = new Texture("images/all64.png");
}
@Override
public void show() {
sw = Gdx.app.getGraphics().getWidth();
sh = Gdx.app.getGraphics().getHeight();
stage = new Stage(new FitViewport(sw, sh));
faceActor64 = new FaceActor(faceTexture64);
faceActor64.setBounds(150, 150, 64, 64);
stage.addActor(faceActor64);
Gdx.input.setInputProcessor(stage);
}
@Override
public void render(float delta) {
Gdx.gl.glClearColor(0,0,0,1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
stage.act(delta);
stage.draw();
}
@Override
public void resize(int width, int height) {
stage.getViewport().update(width, height, true);
}
@Override
public void hide() {
stage.dispose();
}
@Override
public void dispose() {
faceTexture64.dispose();
}
}
我正在使用64px的图片。
Result in a smartphone of 480x800.
Result in a smartphone of 1080x1920.
知道怎么解决吗?
答案 0 :(得分:1)
你在做什么是这样的:
对于720x1280
设备,您要将游戏世界的视图设置为720x1280
,并将1080x1920
设备设置为1080x1920
。您的资产很可能不会改变大小,因此设备拥有的像素越多,它对游戏世界的显示就越多。我总是告诉人们忘记像素,除非他们想要一个像素完美的游戏,如果你不调整你的资产,那就是你正在创造的,一个像素完美的游戏世界。
如果您考虑一下,您的游戏甚至不需要了解该设备。它只需要知道你在FitViewport
中呈现多少游戏世界。所以,让我们说我有一个平铺游戏,我的平铺大小为1x1
单位。如果我想要垂直显示16个图块而横向显示9个图块,我会将FitViewport
设置为new FitViewport(9, 16)
。这会填满大多数设备的屏幕,因为它们的宽高比通常为16:9
。
答案 1 :(得分:0)
简短的解释是,只将常量传递给Viewport构造函数,而不是实际的屏幕尺寸。选择您要使用的尺寸,视口将拉伸它们以适合实际的屏幕。
另外,如果您不想要黑条(“letterboxing / pillarboxing”),请使用ExtendViewport而不是FitViewport。