libgdx分辨率/密度缩放资产

时间:2016-11-22 01:23:19

标签: libgdx screen resolution scaling

快速提问,

我正在使用libgdx进行游戏并遇到麻烦。我试图扩展我的资产,并且我使用Gdx.graphics.getDensity()来获取密度,然后使用它作为乘数设置我的资产大小。我遇到的问题是在分辨率为2560x1600的平板电脑上的密度为2.0,而具有1080x1920的nexus 5仿真器的密度为2.652 ...平板电脑的密度比小手机小吗?

如果基于Android应用程序屏幕大小的密度不可靠,我应该使用什么来获得缩放倍数?

1 个答案:

答案 0 :(得分:6)

要回答你的第一个问题,这是一件硬件事。即使分辨率较小,Nexus 5的PPI(每英寸像素数)比例也可能高于第二个。

关于你的第二个问题,我建议替代Gdx.graphics.getDensity():如果你想确保你的资产相对于屏幕大小相同(即2560x1600显示屏上的80x80资产将是在1280x800显示器上尺寸的一半),我认为你想让你的资产保持相同的尺寸而改变相机的尺寸

当您在libGDX(或任何游戏引擎)中创建游戏时,您需要记住游戏中三组尺寸/坐标之间的差异:

  • 视口大小是屏幕上用于绘制游戏的空间大小。它以像素为单位,默认为您的窗口大小(在全屏游戏中,屏幕大小)。
  • 游戏世界尺寸/坐标完全是任意的。它们以您想要的任何单位(米,英寸,香蕉,F16等)进行测量。你知道你在游戏世界中工作,因为你有漂浮物。
  • 相机尺寸是指' world'你可以用游戏单位一次看到。您可以使您的相机显示世界的1280x800部分或世界的3x5部分或137.6x42部分。棘手的是,libGDX的OrthographicCamera类默认你的视口大小,就像1个游戏单位== 1像素一样。

希望这是有道理的。让我们来看看其含义:

假设我的游戏世界中有一个800x600 GU(游戏单元)资产为0,0。我的视口大小为2560x1600,我的相机也缩放到2560x1600。我的800x600 GU对象将在屏幕上呈现800x600像素。

现在假设我想以相同的比例将我的游戏移植到其他屏幕尺寸(暂时保持简单)。我仍然有2560x1600视口大小,但我将我的相机更改为8x5 GU,我的游戏对象更改为2.5x1.875 GU。这些尺寸将明确设置 - 与视口大小无关。这使得1 GU = 320px。最终结果是我的游戏对象仍将在屏幕上呈现800x600像素的图像。

现在让我们看看它在1280x800px分辨率下是如何工作的:我的视口是1280x800像素,但我的相机保持在8x5 GU,我的游戏对象在2.5x1.875 GU。由于相机的尺寸,1 GU = 160px,这意味着我的游戏对象渲染为400x300,这意味着它在较小的屏幕上按比例相同。

希望没有图片就有意义。当您开始使用具有不同宽高比的屏幕时(即,您从8x5屏幕变为3x2屏幕),您需要一些额外的逻辑来保持视口的宽高比与您的相机相同(否则事情会全部拉伸)。幸运的是,libGDX提供了some viewports which will do this for you

您可以在此处找到libGDX社区的external tutorial,其中详细介绍了此问题。