5

我正在使用 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();

这只是一个便宜的解决方案,还是应该这样做?

4

4 回答 4

4

使用与密度无关的像素意味着所有屏幕上表格的物理尺寸应该相同。由于您的笔记本电脑屏幕(物理上)要大得多,您会看到桌子比预期的要小得多。

我会建议另一种方法,将对象放置在小部分中。例如宽度的 30% 或高度的 45%。

要实现这一点,只需假设舞台分辨率并根据需要放置对象,然后在 resize 方法中更改视口,以便获得完整视图。希望能帮助到你。

更多信息, https://code.google.com/p/libgdx-users/wiki/AspectRatio

于 2013-12-13T17:06:38.513 回答
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=2System.getPropery("density")可以改变您喜欢模拟的屏幕。

于 2013-12-15T17:11:35.727 回答
1

一种方法是具有固定的视口大小。创建您的相机,例如 1366x768,并使用该坐标放置所有对象。然后相机将填满其他分辨率的整个屏幕。

cam = new OrthographicCamera(1366, 768);
于 2013-12-13T19:18:41.573 回答
0

尝试看一些教程....我个人认为最好处理像素,使用相机会对您有很大帮助,请检查此链接一次

获得不同的屏幕分辨率

于 2013-12-15T10:17:29.017 回答