Java LibGDX分辨率独立性

Java LibGDX分辨率独立性,java,android,libgdx,Java,Android,Libgdx,我已经在谷歌和这个网站上搜索了很多关于这个问题的信息,但无法解决这个问题 我是游戏开发和LibGDX的新手,无法找到一个很好的解决方案来解释如何将我的游戏移植到所有不同的屏幕大小 你能帮我吗 Thanx使用最新的libgdx版本时,您会发现Viewport类 视口描述屏幕坐标系(从左下角的0,0到右上角的1280768(取决于设备))到游戏和场景坐标系的转换 Viewport类在如何进行转换方面有不同的可能性。它可以拉伸场景坐标系以完全适合屏幕坐标系,这可能会更改纵横比,例如“拉伸”图像或按钮

我已经在谷歌和这个网站上搜索了很多关于这个问题的信息,但无法解决这个问题

我是游戏开发和LibGDX的新手,无法找到一个很好的解决方案来解释如何将我的游戏移植到所有不同的屏幕大小

你能帮我吗


Thanx

使用最新的libgdx版本时,您会发现Viewport类

视口描述屏幕坐标系(从左下角的0,0到右上角的1280768(取决于设备))到游戏和场景坐标系的转换

Viewport类在如何进行转换方面有不同的可能性。它可以拉伸场景坐标系以完全适合屏幕坐标系,这可能会更改纵横比,例如“拉伸”图像或按钮

还可以将具有纵横比的场景视口拟合到视口中,这可能会生成黑色边框。例如,当您开发了4:3屏幕的游戏,现在将其嵌入16:10屏幕时

(在我看来)最好的选择是通过匹配最长或最短边将场景视口拟合到屏幕中

这样,您可以在(0,0)到(1280768)之间创建屏幕/窗口坐标系,并在横向模式下创建(0,0)到(16,10)之间的游戏坐标系。匹配最长边时,这意味着屏幕的左下角为(0,0),右下角为(16,0)。。。在长宽比不相同的设备上,上角的y值可能略有不同

或者在匹配最短边时,这意味着您的场景坐标将始终显示在(x,0)到(x,10)。。。但是,由于设备分辨率不同,右边缘可能不完全具有和x值16

当使用该方法时,您可能需要重新定位一些按钮或UI元素,而这些按钮或UI元素应该呈现在顶部或右侧边缘上


希望它能帮助…

曾经我也遇到过这个问题,但最终我得到了有效的解决方案,可以在libgdx中使用
SpriteBatch
Stage
绘制任何东西。使用
正交摄影机
我们可以做到这一点

首先选择一个最适合游戏的恒定分辨率。在这里,我已经采取了1280*720(景观)

在任何类型的分辨率下运行此代码,它将在该分辨率下进行调整,不会产生任何干扰

class ScreenTest implements Screen {

    final float appWidth = 1280, screenWidth = Gdx.graphics.getWidth();
    final float appHeight = 720, screenHeight = Gdx.graphics.getHeight();

    OrthographicCamera camera;

    SpriteBatch batch;
    Stage stage;

    Texture img1;
    Image img2;

    public ScreenTest() {
        camera = new OrthographicCamera();
        camera.setToOrtho(false, appWidth, appHeight);

        batch = new SpriteBatch();
        batch.setProjectionMatrix(camera.combined);

        img1 = new Texture("your_image1.png");
        img2 = new Image(new Texture("your_image2.png"));
        img2.setPosition(0, 0); // drawing from (0,0)

        stage = new Stage(new StretchViewport(appWidth, appHeight, camera));
        stage.addActor(img2);
    }

    @Override
    public void render(float delta) {
        batch.begin();
        batch.draw(img, 0, 0);
        batch.end();

        stage.act();
        stage.act(delta);
        stage.draw();

        // Also You can get touch input according to your Screen.
        if (Gdx.input.isTouched()) {
            System.out.println(" X " + Gdx.input.getX() * (appWidth / screenWidth));
            System.out.println(" Y " + Gdx.input.getY() * (appHeight / screenHeight));
        }
    }
    // ...
}