1

我刚刚在 Play Store 上发布了我的游戏,我的一些朋友抱怨我在一些棒棒糖设备(nexus 4,OS 5.0)中加载时间超过1 分钟(超过 1000 帧) 。通常需要5-10 (180 帧)大约)秒来加载所有资产,即使是单核 1.0 GHz 处理器的设备。

我正在使用资产管理器类加载所有资产。

问题在于加载 Mp3 声音文件。大约有 52 个声音,2 个音乐文件。

提前致谢

4

2 回答 2

1

我从未亲自使用过 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”(不要重复自己)。如果您希望充分了解您所写的关于对象分类的内容,这是一个很好的原则。加载时间并不总是与您可以使用资产做什么有关。这是关于你如何处理你的代码。进一步阅读这里这里这里

于 2015-04-25T05:44:48.103 回答
0

我也遇到了同样的问题,要加载大约 10 张图片(总共 3 mb,加载时间大约 8 秒)。我只是通过压缩图像将总大小减少到 2 mb,并节省了 3-4 秒。还要确保在完成后处置资产。

尝试一下并测试结果。

于 2015-04-25T08:12:52.853 回答