我正在使用Libgdx编写一个Android游戏代码,你可能知道,如果做错了很多屏幕分辨率会导致一些问题。所以我试图使用这个DP单元而不是像素。
但是,我在这里有这个方法:
public static float pixelToDP(float dp){
return dp * Gdx.graphics.getDensity();
}
Gdx.graphics.getDensity()
方法实际上获得了SCALE,所以它已经为我完成了。
现在问题是,libgdx是跨平台的,有利于测试。当我在我的S4上启动它时,它的分辨率为1920x1080,dpi高达480,与我的可怕和价格过高的笔记本电脑相比,它有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();
这只是一个廉价的解决方案还是应该如何完成?
答案 0 :(得分:4)
使用与密度无关的像素意味着所有屏幕上的表的物理大小应相同。由于您的笔记本电脑屏幕(物理上)要大得多,您会发现该表比预期的要小很多。
我建议另一种方法是将对象放置在一小部分大小中。例如宽度的30%或高度的45%。
要实现此功能,只需假设舞台分辨率并根据需要放置对象,然后在resize方法中更改视口,以便获得完整视图。 希望它有所帮助。
更多信息, https://code.google.com/p/libgdx-users/wiki/AspectRatio
答案 1 :(得分:2)
最好的方法是根据执行目标操纵密度。
所以我通常做的是将密度存储在单个字段中的字段中,并根据场景进行设置:
public class Game {
public static float density;
public static initDensity(){
if (GDX.app.getTarget() == 0){
density = 2.0f;
}else {
density = GDX.graphics.getDensity();
}
}
public float toPixel(float dip){
return dip * density;
}
}
通过这种方法,您可以“模拟”实际拥有的更密集的屏幕,并且通过使用运行配置中的属性(如-Ddensity=2
和System.getPropery("density")
),您可以改变您想要模拟的屏幕。
答案 2 :(得分:1)
一种方法是具有固定的视口大小。创建相机,例如1366x768,并使用该坐标放置所有对象。然后相机将填满所有其他分辨率的整个屏幕。
cam = new OrthographicCamera(1366, 768);
答案 3 :(得分:0)
尝试看几个教程....我个人认为最好处理像素并使用相机会对你有所帮助,请查看此链接一次