我有一款原生为Android开发的游戏,现在我的用户也想要一个iOS版本。我认为LibGDX会是更好的选择,因为它会让我重用游戏中的Java代码,而且我已经有了一些使用它的经验。
在我的游戏中,我针对不同的设备密度设置了不同的图像尺寸(在drawable-hdpi,drawable-xhdpi等中)。
所以,我的问题是:如何实现相同目标,但使用LibGDX(如果需要进行任何更改,还要考虑iOS设备分辨率所需的新密度)?
谢谢。
答案 0 :(得分:0)
是的,你可以达到同样的效果,但除非你编写一些本机代码,否则它不会像在Android上一样自动化。我发现管理它的最好方法就是自己动手:
1)当您的应用启动时,您可以使用Gdx.graphics.getHeight()
,getWidth()
,Gdx.graphics.getDensity()
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)