针对不同分辨率的LibGDX不同资产,例如Android

时间:2017-07-30 22:44:06

标签: java android ios libgdx

我有一款原生为Android开发的游戏,现在我的用户也想要一个iOS版本。我认为LibGDX会是更好的选择,因为它会让我重用游戏中的Java代码,而且我已经有了一些使用它的经验。

在我的游戏中,我针对不同的设备密度设置了不同的图像尺寸(在drawable-hdpi,drawable-xhdpi等中)。

所以,我的问题是:如何实现相同目标,但使用LibGDX(如果需要进行任何更改,还要考虑iOS设备分辨率所需的新密度)?

谢谢。

3 个答案:

答案 0 :(得分:0)

是的,你可以达到同样的效果,但除非你编写一些本机代码,否则它不会像在Android上一样自动化。我发现管理它的最好方法就是自己动手:

1)当您的应用启动时,您可以使用Gdx.graphics.getHeight()getWidth()Gdx.graphics.getDensity()

获取screen size和密度

2)根据大小和密度,您可以将位置路径更改为应从中加载资源的正确文件夹。

3)现在,当运行任何资产加载代码时,请确保它使用上述步骤中的预设路径,以便获得该显示大小/密度的正确资产。

答案 1 :(得分:0)

大多数情况下,您可以使用最大的图像并使用`Viewports'来处理分辨率和宽高比。较大的图像将按比例缩小,当然会导致一些细节丢失。

视口会自动将您想要显示的游戏世界的大小缩放到显示它的屏幕上。例如,FitViewport(100, 100)将创建一个显示100 x 100“游戏单元”的视口。如果您要在1920 x 1080设备上播放,则会将100 x 100游戏世界扩展到1080 x 1080区域并留下840 x 1080的空栏。

游戏世界的大小与像素无关。您可以创建一个大小为0.5f x 0.5f世界单位的敌人,并为其提供256 x 256像素的纹理。您的视口会为您缩放到正确的大小。

除非你想要一个像素完美的游戏,否则这应该足够好了。在一些较大的屏幕上但是低分辨率的设备,你可能会因为过滤而得到一些小的假象,设置纹理的过滤Texture.setFilter(TextureFilter.Nearest, TextureFilter.Linear)可能会修复一些。

我在设计图形时所考虑的是我的艺术中的像素应该代表大致或至少1个屏幕像素。通常我只是为HD绘制完美的像素,它在800 x 480屏幕上看起来很好。如果您想要提高性能,可以使用MipMaps,我认为TexturePacker会使用正确的Filter设置自动生成它们,但我对它们没有经验。

答案 2 :(得分:0)

可以使用

com.badlogic.gdx.assets.loaders.resolvers.ResolutionFileResolver.

这里是javadoc