我刚刚在play商店上发布了我的游戏,我的一些朋友抱怨说,在一些棒棒糖设备(nexus 4,OS5.0)中,加载时间超过1分钟(超过1000帧),.Usually需要5-10 (180帧)秒来加载所有资产,甚至是带有单核1.0 GHz处理器的设备。
我使用资产管理类加载所有资产。
问题是加载Mp3声音files.There大约有52个声音,2个音乐文件。
提前感谢
发布于 2015-04-25 05:44:48
我个人从未使用过AssetsManager,但我可以使用其他各种技术来帮助您:
资产存储在Android项目的资产目录中,并在部署应用程序时自动与APK一起打包。没有其他应用程序可以访问这些文件。 文件也可以存储在内部存储器中,在那里它们是可读的和可写的。每个安装的应用程序都有一个专用的内部存储目录。此目录也只能由该应用程序访问。您可以将此存储视为应用程序的私有工作区。
对于我来说,通常的做法是创建不同的处理程序,如soundHandler、spriteHandler、animationHandler等。您可以将调用平均分离出来,并从每个类加载所需的内容。它可能有助于添加一个启动屏幕(如果您还没有),在您的运行时资产加载中加载它将是非常有用的。这将提供资产正在快速加载的“错觉”,但屏幕只是分层。
示例:
public void create () {
batcher = new SpriteBatch();
SettingsHandler.load();
AssetsHandler.load();
SoundHandler.load();
setScreen(new MainMenuScreen(this));
}
我也会使用纹理包装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
纹理Atlases的示例实现:
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);
当从SD或资产文件夹加载时,我会重新记录跟踪LibGdx的建议。并实时操作文件,并相应地分配内存使用。这不是你所能做的。
有什么值得推荐的呢?如何缩短libgdx中所有资产的加载时间给出了一个很好的答案。创建一个启动屏幕的形式,但是对于您的主GUI来说,为了使它看起来像是已经加载了资产,但是您所要做的只是在运行时在您的资产加载上呈现一个屏幕。请强调上面给出的示例,但要使用完整的代码示例。
我也会回顾一下编码原则“干”(不要重复你自己)。这是一个伟大的原则,如果你希望充分与你所写的有关对象的分类。加载时间并不总是关于如何处理资产的问题。关键在于你如何处理你的代码。再读这里、这里和这里
发布于 2015-04-25 08:12:52
我也有同样的问题,大约有10张图片要加载(总共3MB,加载时间约8秒)。我只是通过压缩图像将总大小减少到2MB,并节省了3到4秒。此外,一旦完成,也要确保处置资产。
试一试,并测试结果。
https://stackoverflow.com/questions/29860560
复制相似问题