保持纵横比在libGDX中

时间:2016-06-07 06:08:41

标签: android android-studio libgdx screen-resolution aspect-ratio

我正在使用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.

知道怎么解决吗?

2 个答案:

答案 0 :(得分:1)

你在做什么是这样的:

对于720x1280设备,您要将游戏世界的视图设置为720x1280,并将1080x1920设备设置为1080x1920。您的资产很可能不会改变大小,因此设备拥有的像素越多,它对游戏世界的显示就越多。我总是告诉人们忘记像素,除非他们想要一个像素完美的游戏,如果你不调整你的资产,那就是你正在创造的,一个像素完美的游戏世界。

如果您考虑一下,您的游戏甚至不需要了解该设备。它只需要知道你在FitViewport中呈现多少游戏世界。所以,让我们说我有一个平铺游戏,我的平铺大小为1x1 单位。如果我想要垂直显示16个图块而横向显示9个图块,我会将FitViewport设置为new FitViewport(9, 16)。这会填满大多数设备的屏幕,因为它们的宽高比通常为16:9

答案 1 :(得分:0)

简短的解释是,只将常量传递给Viewport构造函数,而不是实际的屏幕尺寸。选择您要使用的尺寸,视口将拉伸它们以适合实际的屏幕。

另外,如果您不想要黑条(“letterboxing / pillarboxing”),请使用ExtendViewport而不是FitViewport。