将宽高比保持在 libGDX

Keep the aspect ratio in libGDX

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

知道如何解决吗?

你在那里做的是这个:

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

如果您考虑一下,您的游戏甚至不需要了解设备。它只需要知道在 FitViewport 中要渲染多少游戏世界。假设我有一个方块游戏,我的方块大小为 1x1 单位 。如果我想垂直显示 16 个图块,水平显示 9 个图块,我会将 FitViewport 设置为 new FitViewport(9, 16)。这将填满大多数设备的屏幕,因为它们的纵横比通常为 16:9.

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

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