快速提问,
我正在使用libgdx进行游戏并遇到麻烦。我试图扩展我的资产,并且我使用Gdx.graphics.getDensity()
来获取密度,然后使用它作为乘数设置我的资产大小。我遇到的问题是在分辨率为2560x1600
的平板电脑上的密度为2.0,而具有1080x1920
的nexus 5仿真器的密度为2.652 ...平板电脑的密度比小手机小吗?
如果基于Android应用程序屏幕大小的密度不可靠,我应该使用什么来获得缩放倍数?
答案 0 :(得分:6)
要回答你的第一个问题,这是一件硬件事。即使分辨率较小,Nexus 5的PPI(每英寸像素数)比例也可能高于第二个。
关于你的第二个问题,我建议替代Gdx.graphics.getDensity()
:如果你想确保你的资产相对于屏幕大小相同(即2560x1600显示屏上的80x80资产将是在1280x800显示器上尺寸的一半),我认为你想让你的资产保持相同的尺寸而改变相机的尺寸。
当您在libGDX(或任何游戏引擎)中创建游戏时,您需要记住游戏中三组尺寸/坐标之间的差异:
希望这是有道理的。让我们来看看其含义:
假设我的游戏世界中有一个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,其中详细介绍了此问题。