【问题标题】:LibGDX different assets for different resolutions like AndroidLibGDX 针对不同分辨率的不同资产,如 Android
【发布时间】:2017-07-30 22:44:06
【问题描述】:
我有一个为 Android 原生开发的游戏,现在我的用户也想要一个 iOS 版本。我认为 LibGDX 会是更好的选择,因为它可以让我重用游戏中的 Java 代码,而且我已经有了一些使用它的经验。
在我的游戏中,对于不同的设备密度(drawable-hdpi、drawable-xhdpi 等),我有不同的图像尺寸。
所以,我的问题是:我怎样才能达到同样的效果,但使用 LibGDX(如果需要任何更改,还要注意 iOS 设备分辨率所需的新密度)?
谢谢。
【问题讨论】:
标签:
java
android
ios
libgdx
【解决方案1】:
是的,您可以实现相同的目标,但它不会像在 Android 上那样是自动的,除非您也编写一些本机代码。我发现管理它的最佳方法就是自己动手:
1) 当您的应用启动时,您可以使用Gdx.graphics.getHeight()、getWidth()、Gdx.graphics.getDensity() 获取screen size 和密度
2) 根据大小和密度,您可以将位置路径更改为应该从中加载资产的正确文件夹。
3) 现在,当运行任何资产加载代码时,请确保它使用您在上述步骤中预设的路径,以便您获得适合该显示尺寸/密度的正确资产。
【解决方案2】:
大多数时候,您可以使用最大的图像并使用`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 个屏幕像素。通常我只是为高清画出完美的像素,它在800 x 480 屏幕上看起来很好。如果您想获得更多性能,您可以使用MipMaps,我认为TexturePacker 会使用正确的Filter 设置自动生成它们,但我没有使用它们的经验。
【解决方案3】:
这可以使用
com.badlogic.gdx.assets.loaders.resolvers.ResolutionFileResolver.
这里是javadoc。