android - 高 Assets 加载时间

标签 android libgdx android-5.0-lollipop nexus-4

我刚刚在 Play 商店发布了我的游戏,我的一些 friend 提示我在一些 Lollipop 设备(nexus 4, OS 5.0)。通常需要 5-10(约 180 帧) 秒来加载所有 Assets ,即使是配备单核 1.0 GHz 处理器的设备也是如此。

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

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

提前致谢

最佳答案

我个人从未使用过 AssetsManager,但我可以推荐各种其他技术来帮助您:

Assets are stored in your Android project's assets directory and will be packaged with your APK automatically when you deploy your application. No other application can access these files.

Files can also be stored on the internal storage, where they are readable and writable. Each installed application has a dedicated internal storage directory. This directory is again only accessible by that application. One can think of this storage as a private working area for the application.

对我来说,通常的做法是创建不同的处理程序,例如 soundHandler、spriteHandler、animationHandler 等。您可以将调用均匀地分开,然后从每个类加载您需要的内容。它可能有助于添加启动画面(如果您还没有启动画面),在您的运行时 Assets 加载过程中加载它会非常有用。这将提供 Assets 正在快速加载但屏幕只是分层的“错觉”。

示例:

    public void create () {
            batcher = new SpriteBatch();
            SettingsHandler.load();
            AssetsHandler.load();
            SoundHandler.load();
            setScreen(new MainMenuScreen(this));
    }

我还建议使用由 Texture Packer GUI 创建的纹理图集.您可以从 .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's Advice.并在从 SD 或 Assets 文件夹加载文件时实时操作文件,并相应地分配内存使用。这不是你能做的全部。

推荐什么? How to decrease loading time of all Assets in libgdx提供了一个很好的答案。创建一种启动画面形式但用于您的主 GUI,使其看起来像是加载了 Assets ,但您所做的只是在运行时加载的 Assets 上渲染一个屏幕。强调上面给出的示例,但要有完整的代码示例。

我还建议研究编码原则“DRY”(不要重复自己)。如果您希望在对象分类方面写的内容充分,这是一个很好的原则。加载时间并不总是与您可以使用 Assets 做什么有关。这是关于您如何处理您的代码。 延伸阅读 here , herehere

关于android - 高 Assets 加载时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29860560/

相关文章:

android - AssetInputStream.read() 总是返回 -1

android-studio - libGDX,项目构建失败。无法确定Java版本 '9.0.1'

java - InputListener 不适用于 OrthographicCamera 和 Actors

android - libgdx 游戏如何在用户单击暂停图标时显示暂停屏幕

Android L - 使用 Camera2 api 使用自动对焦拍摄闪光图像

java - Android:使屏幕 "flash"变白

java - 在 Android 应用程序中将位图图像转换/保存为文件

java - 如何使用 Android Volley 将参数发送到 Azure Functions?

android - 在 Kitkat 等较旧的 sdk 中使用 colorPrimaryDark

android - 无法在 lapism/SearchView 中的空对象上调用 void android.view.View.setElevation(float)