如何在LibGDX中使用DIP / DP

时间:2017-01-24 15:59:13

标签: java android libgdx

过去几个小时我一直试图找到解决这个问题的方法,但我似乎找不到任何东西。

我正在使用LibGDX为Android开发游戏。在模拟器中,游戏看起来很好,但是当我在手机上播放时,一切都不同而且放错地方。我找到的解决方案是使用密度单个像素而不是常规像素,所以无论我使用什么设备,所有内容都是核心放置的。但是,我似乎找不到合适的方法来做到这一点。我发现的唯一相关解决方案是使用它:

   public static float pixelToDP(float dp) {
        return dp * Gdx.graphics.getDensity();
    }

我尝试使用上面的公式调整一些对象的大小,但它们仍然与模拟器不同。

如果有人有解决方案并不涉及更改Ortographic Camera(已经尝试过那些),请帮助我!

1 个答案:

答案 0 :(得分:1)

这个答案只是为了补充TomGrill在评论中所说的内容。

您的游戏在模拟器中看起来很好的原因是因为您使用了符合模拟器分辨率的值。

如果在1920x1080分辨率下将精灵定位在100,100,则精灵将位于左上角(或更低,取决于y轴的方向)左角。 在200,200分辨率下,精灵将被放置在屏幕中间。

精灵的大小也取决于分辨率/像素密度。如果你有每平方英寸1像素,32x32像素精灵将是32英寸宽和高。但在具有高像素密度的屏幕上,可以说100px pr。平方英寸。 32x32精灵看起来很小。

这是视口进入的地方。你选择一个分辨率,比方说900x540,你只需编码这个分辨率。视口将确保您的游戏向上或向下缩放以适应任何分辨率和像素密度。如果您在900x540屏幕的中间放置一个精灵,视口将确保它位于1920x1080分辨率的中间。

即使你想自己做这些计算,Gdx.graphics.getDensity();它本身没有任何用处。您需要物理屏幕的宽度和高度才能找到分辨率。你接下来要做的就是重新发明轮子。