libgdx分辨率/密度缩放资产

joh*_*566 2 scaling resolution screen libgdx

快问,

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

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

Joh*_*ohn 7

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

至于你的第二个问题,我建议一个替代方案Gdx.graphics.getDensity():如果你试图确保你的资产相对于屏幕的大小相同(即2560x1600显示器上的80x80资产将是1280x800显示器的一半大小) ,然后我想你想让你的资产保持相同的大小,改变相机的大小.

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

  • 视口大小是屏幕上用于绘制游戏的空间大小.它以像素为单位,默认为您的窗口大小(在全屏游戏中,屏幕大小).
  • 游戏世界大小/坐标完全是任意的.它们以您想要的任何单位(米,英寸,香蕉,F16等)进行测量.你会知道你在游戏世界中工作,因为你有漂浮物.
  • 相机大小是您在游戏单元中一次可以看到的"世界"数量.您可以使您的相机显示世界的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提供了一些将为您执行此操作的视口.

您可以在此处找到libGDX社区的外部教程,其中详细介绍了此问题.