我刚刚在 Play Store 上发布了我的游戏,我的一些朋友抱怨我在一些棒棒糖设备(nexus 4,OS 5.0)中加载时间超过1 分钟(超过 1000 帧) 。通常需要5-10 (180 帧)大约)秒来加载所有资产,即使是单核 1.0 GHz 处理器的设备。
我正在使用资产管理器类加载所有资产。
问题在于加载 Mp3 声音文件。大约有 52 个声音,2 个音乐文件。
提前致谢
我刚刚在 Play Store 上发布了我的游戏,我的一些朋友抱怨我在一些棒棒糖设备(nexus 4,OS 5.0)中加载时间超过1 分钟(超过 1000 帧) 。通常需要5-10 (180 帧)大约)秒来加载所有资产,即使是单核 1.0 GHz 处理器的设备。
我正在使用资产管理器类加载所有资产。
问题在于加载 Mp3 声音文件。大约有 52 个声音,2 个音乐文件。
提前致谢
我从未亲自使用过 AssetsManager,但我可以推荐各种其他技术来帮助您:
资产存储在您的 Android 项目的资产目录中,并在您部署应用程序时自动与您的 APK 打包在一起。没有其他应用程序可以访问这些文件。
文件也可以存储在可读写的内部存储器上。每个安装的应用程序都有一个专用的内部存储目录。该目录再次只能由该应用程序访问。可以将此存储视为应用程序的私有工作区。
对我来说,通常的做法是创建不同的处理程序,例如 soundHandler、spriteHandler、animationHandler 等。您可以将调用均匀地分开并从每个类中加载您需要的内容。它可能有助于添加启动屏幕(如果您还没有启动屏幕),在运行时资产加载时加载它会非常有用。这将提供资产正在快速加载但屏幕只是分层的“错觉”。
例子:
public void create () {
batcher = new SpriteBatch();
SettingsHandler.load();
AssetsHandler.load();
SoundHandler.load();
setScreen(new MainMenuScreen(this));
}
我还建议使用Texture Packer GUI创建的 Texture Atlases 。您可以从 .txt 文件而不是图像文件加载图像。这将为您提供 spritesheet 上的“地图集”,以字符串形式阅读总是更可取的。
示例图集文件:
gui.png
format: RGBA8888
filter: Nearest, Nearest
repeat: none
drone1
rotate: false
xy: 274, 2
size: 176, 66
orig: 176, 66
offset: 0, 0
index: -1
drone2
rotate: false
xy: 2, 91
size: 150, 66
orig: 150, 66
offset: 0, 0
index: -1
纹理图集的示例实现:
int droneIndex = 1;
TextureRegion[] drones = new TextureRegion[1];
for (int i = 0; i < drones.length; i++)
{
drones[i] = gui.findRegion(("drone" + droneIndex));
}
droneFly = new AnimationHandler(0.2f, drones);
我建议遵循LibGdx 的建议。并在从 SD 或 Assets 文件夹加载文件时实时操作文件,并相应地分配内存使用。你能做的还不止这些。
会推荐什么?如何减少 libgdx 中所有资产的加载时间提供了一个很好的答案。为您的主 GUI 创建一种初始屏幕形式,使其看起来像已加载资产,但您所做的只是在运行时加载资产时渲染一个屏幕。强调上面给出的示例,但带有完整的代码示例。
我还建议研究编码原则“DRY”(不要重复自己)。如果您希望充分了解您所写的关于对象分类的内容,这是一个很好的原则。加载时间并不总是与您可以使用资产做什么有关。这是关于你如何处理你的代码。进一步阅读这里,这里和这里
我也遇到了同样的问题,要加载大约 10 张图片(总共 3 mb,加载时间大约 8 秒)。我只是通过压缩图像将总大小减少到 2 mb,并节省了 3-4 秒。还要确保在完成后处置资产。
尝试一下并测试结果。