Libgdx 窗口大小调整:保持纵横比

问题描述 投票:0回答:2

我目前正在使用 Libgdx 库制作游戏,目前遇到了一个小障碍。

我目前在桌面项目的 Main.java 类中禁用了调整大小的功能。

LwjglApplicationConfiguration cfg = new LwjglApplicationConfiguration();
    cfg.resizable = false;

我想知道是否有一种简单的方法可以在保持纵横比的同时调整窗口大小。 (就像当你移动+调整大小时)

我有什么选择? :)

java libgdx desktop-application
2个回答
3
投票

该功能并不能让您保持纵横比,甚至无法保持您所想的那样。它只是禁用了在桌面应用程序中调整屏幕大小的可能性。

请查看 libGDX wiki,特别是 Scene2D 页面。 看一下舞台上的 Viewport 东西。它解释了如何保持当前 libGDX 的纵横比。有一些教程确实借助虚拟分辨率和屏幕调整大小方法解释了不同的方式。已经过时了!

来自维基

此示例还使用固定舞台尺寸,其中任一舞台上都带有“黑条” 侧面,这次使用 glViewport。首先舞台尺寸为800x480 使用 Scaling 类进行缩放以适应屏幕尺寸。结果是 用于配置glViewport,它改变屏幕的哪一部分 OpenGL会使用。最后,setViewport 传递视口位置 和尺寸。结果和上个例子一样,阶段有 “黑条”是必要的,以保持纵横比,但不能绘制 发生在视口之外。

public void resize (int width, int height) {
        Vector2 size = Scaling.fit.apply(800, 480, width, height);
        int viewportX = (int)(width - size.x) / 2;
        int viewportY = (int)(height - size.y) / 2;
        int viewportWidth = (int)size.x;
        int viewportHeight = (int)size.y;
        Gdx.gl.glViewport(viewportX, viewportY, viewportWidth, viewportHeight);
        stage.setViewport(800, 480, true, viewportX, viewportY, viewportWidth, viewportHeight);
}

问候


0
投票

老问题,但也许有人发现这很有用。

定义阶段时,您可以只使用

FitViewport

stage = new Stage(new FitViewport(640, 480));

然后您可以在

Scene
resize
方法中正常更新它:

@Override
public void resize(int width, int height) {
    stage.getViewport().update(width, height, true);
}

来源

© www.soinside.com 2019 - 2024. All rights reserved.