LibGDX - 如何确定当前设备是否支持给定的屏幕分辨率

3

所以我正在为我的程序编写一些工具,处理基本配置,从数据文件中读取设置,然后将这些设置作为活动配置。我还建立了一个错误检查机制,以确保设置格式正确且具有有效值。

我想查看当前设备支持的分辨率,并将其与数据文件中指定的分辨率进行比较。在libGDX中有没有我错过的简单方法?我知道LWJGL有一个函数可以给您支持的分辨率数组,但是我不想重复发明轮子。

我正在寻找像这样的东西: boolean isValidResolutionForDevice(int width,int height)

我需要自己编写这个功能吗?还是已经存在了?对我来说,这似乎是一个非常有用的函数,必须已经写入某个库中。

2个回答

3

实际上,有一种方法可以做到这一点。主要的com.badlogic.gdx.Application接口有一个getGraphics()方法,从中返回的com.badlogic.gdx.Graphics类有一个getDisplayModes()方法,它返回DisplayMode[]DisplayMode基本上看起来像这样(注释和构造函数已删除):

public class DisplayMode {
    /** the width in physical pixels **/
    public final int width;
    /** the height in physical pixles **/
    public final int height;
    /** the refresh rate in Hertz **/
    public final int refreshRate;
    /** the number of bits per pixel, may exclude alpha **/
    public final int bitsPerPixel;
}

然后您可以扫描这些内容,以查看是否支持所需的分辨率。

唯一令人烦恼的消息是,由于getGraphics()位于Application对象上,似乎无法查询可用的图形模式,直到Application对象(例如)被创建之后。 因此,您可以选择任意分辨率(例如1024x768),启动游戏,然后立即切换到受支持的分辨率,如果原始分辨率实际上不受支持,则可以让用户在设置菜单中选择(可选)。


我找到了我认为您正在引用的方法org.lwjgl.opengl.Display.getAvailableDisplayModes(),老实说我会为您的用例使用这个方法。您几乎只需在其中使用简单的条件迭代。不需要重新发明轮子。


这篇帖子已经两年了,而且已经有答案了。我们现在讨论的版本和当时完全不一样了。 - Scuba Steve
1
我知道这是一个旧帖子。我想提供一个正确的答案,以防其他人也有同样的问题。 - Max
1
啊,好的。是的,我听到你说的了。 - Scuba Steve

1
很遗憾,在libgdx中没有现成的解决方案,我是这样解决的:
    private Map<Integer, Integer> supportedReolutions;
    private String graphicFolder;

    supportedReolutions = new HashMap<Integer, Integer>();
    supportedReolutions.put(1024, 768);
    supportedReolutions.put(1080, 1920);
    supportedReolutions.put(1200, 1920);
    supportedReolutions.put(2048, 1536);
    supportedReolutions.put(480, 800);
    supportedReolutions.put(640, 1136);
    graphicFolder = "1080x1920";

/**
 * Chose the folder with best graphic for current device
 */
private void setCurrentResolutionFolder() {
    int width = Gdx.graphics.getWidth();
    int height = Gdx.graphics.getHeight();
    if (supportedReolutions.containsKey(width)) {
        if (supportedReolutions.get(width) == height) {
            graphicFolder = String.valueOf(width) + "x"
                    + String.valueOf(height);
        }
    }
}

我喜欢这个解决方案,但是“folder”这个术语是什么意思?你是指物理文件目录吗?编辑:啊,是的,我明白你在这里做了什么。是的,看起来不错。然后你可以从LWJGL获取支持的分辨率列表。 - Scuba Steve

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接