我正在使用 Libgdx 编写一个 android 游戏,如您所知,如果操作不正确,许多屏幕分辨率会导致一些问题。所以我试图使用这个 DP 单位而不是像素。
但是,我在这里有这个方法:
public static float pixelToDP(float dp){
return dp * Gdx.graphics.getDensity();
}
该Gdx.graphics.getDensity()
方法实际上得到了 SCALE,所以它已经为我完成了。
现在的问题是,libgdx 是跨平台的,有利于测试。当我在分辨率为 1920x1080 且 dpi 高达 480 的 S4 上启动它时,与我的 1366x768 @ 92dpi 的糟糕且价格过高的笔记本电脑相反,它正好放置在我想要的位置。在桌面上它很遥远,在 X 和 Y 轴上有几百个像素。
这是因为我的屏幕 dpi 是 @92dpi 测量的,分辨率低了很多,实际游戏在桌面上不是全屏的吗?
下面是绘制对象的代码:
table.setPosition(MathHelper.pixelToDP(150), MathHelper.pixelToDP(200));
为了让它在桌面上完美,我必须这样做:
table.setPosition(MathHelper.pixelToDP(480), MathHelper.pixelToDP(700));
这在我的手机上甚至都看不到,因为比例实际上是 3 倍,这使它在 Y 轴上离屏幕有 200 像素。
有没有解决的办法?还是我基本上必须处理平台检查和不同的代码块?
可能的解决方案:
所以我改变了我的 dp 转换方法,如果我做 100 * 0.5 它会返回一个新的值 50 但实际上我想要 100 + 100 * 0.5 的原始值。
不确定这是否是一个正确的解决方案,但无论表格在笔记本电脑和手机上绘制在完全相同的位置:
public static float pixelToDP(float dp){
if(Gdx.graphics.getDensity() < 1)
return dp + dp * Gdx.graphics.getDensity();
return dp * Gdx.graphics.getDensity();
这只是一个便宜的解决方案,还是应该这样做?