所以我正在为我的程序编写一些工具来处理基本配置,从数据文件中读取设置,然后将这些设置作为活动配置。我还在构建一个错误检查机制,以确保设置格式正确并具有有效值。
我想查看当前设备支持的分辨率是什么,我想将其与数据文件中指定的分辨率进行比较。在libGDX中有一种简单的方法可以解决这个问题吗?我知道LWJGL有一个功能可以为你提供一系列支持的分辨率,但我不想重新发明轮子。
我正在寻找类似的东西: boolean isValidResolutionForDevice(int width,int height)
我自己要写这个吗?或者这已经存在了吗?在我看来,它是一个非常有用的功能,它必须已经写入某个库中。
答案 0 :(得分:2)
实际上有一种方法可以做到这一点。主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对象(例如LwjglApplication
)已创建。所以也许你选择一个任意分辨率(例如1024x768),开始游戏,如果原来没有实际支持,可以立即切换到支持的分辨率(并且可选择让用户在设置菜单中选择)。
我遇到了我认为你指的方法,org.lwjgl.opengl.Display.getAvailableDisplayModes()
,而且......老实说,我只是将这个用于你的用例。你只需要用一个简单的条件内部迭代它就可以了。不完全重塑任何东西。
答案 1 :(得分: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);
}
}
}