我想在我的scene2d ui中使用某个ui元素在较大的屏幕上缩放(不一定是更高的分辨率屏幕)。它在Android布局中非常简单,但如何让它在libgdx中运行。也许我错过了一些API?
可以通过Androidactivity中的界面完成吗? 我能想到的当前解决方案是在differend布局文件夹(values-sw600等)中声明一个标志,并在oncreate()中的androidactivity中获取它,然后通过接口将其传递给libgdx。 请建议是否有更好的方式
答案 0 :(得分:2)
如果有人仍然对更简单的解决方法感到好奇,您可以使用LibGDX方法Gdx.graphics.getDensity();
。这将返回屏幕的像素密度,并可以转换为英寸测量值。
计算:
public float getScreenSizeInches () {
//According to LibGDX documentation; getDensity() returns a scalar value for 160dpi.
float dpi = 160 * Gdx.graphics.getDensity();
float widthInches = Gdx.graphics.getWidth() / dpi;
float heightInches = Gdx.graphics.getHeight() / dpi;
//Use the pythagorean theorem to get the diagonal screen size
return Math.sqrt(Math.pow(widthInches, 2) + Math.pow(heightInches, 2));
}
我实际上没有对此进行过测试,但理论上它应该可行。如果没有,请告诉我。
答案 1 :(得分:0)
由于Gdx.graphics.getWidth()
仅返回视口的大小,而不是屏幕本身,因此vedi0boy提出的解决方案无法正确处理PC平台。
这是适用于所有平台的解决方案
public static double getScreenSizeInches()
{
// Use the primary monitor as baseline
// It would also be possible to get the monitor where the window is displayed
Graphics.Monitor primary = Gdx.graphics.getPrimaryMonitor();
Graphics.DisplayMode displayMode = Gdx.graphics.getDisplayMode(primary);
float dpi = 160 * Gdx.graphics.getDensity();
float widthInches = displayMode.width / dpi;
float heightInches = displayMode.height / dpi;
//Use the pythagorean theorem to get the diagonal screen size
return Math.sqrt(Math.pow(widthInches, 2) + Math.pow(heightInches, 2));
}