思索了很久一直想写一篇有关于自己实践出来的技术文章,为此回报那些曾经在网上无私分享知识的大佬,以及希望对正在探索知识的孩子有所帮助!第一次写文章,独自摸索出来的东西,如有问题请批评指出。标题就写1吧,有心情有时间再写我以后实践的2
项目背景描述:creator开发,安卓、ios集成。
资源大小:png、jpg10兆左右、音频:20兆,龙骨动画:50兆。安卓、ios所需内存500兆。
creator最初开发:将所有节点资源放一个场景,节点资源全在一个场景代码逻辑控制。效果:安卓 中等手机打开会明显黑屏。原因:打开场景的时候,是一个加载资源到内存的过程,这个过程需要耗费时间,造成一个产品最不喜欢的黑屏。ios手机嫌弃内存过大。
优化之旅:1、将首次打开场景暂时未用到的资源放在打开场景之后加载,cc.loader.loadRes,这样可以节约首次打开场景的时间。类似于很多游戏打开后是一个读条的场景。或者在某个时间段悄悄加载,这样就避免用户等待时间。
2、 内存优化、预制
一开始很不明白所谓的内存优化的概念是什么。举个例子:你新建一个空场景,再在项目里面,就放100兆的废资源吧,打包安卓,手机打开很快。但是,如果这100兆资源全部放在场景里面用,再打包、打开、你需要等待很久。(安卓手机效果明显一点,因为我不太习惯苹果产品)。这就是因为打开中,场景的资源需要加载到内存里面去,所耗费时间。而100兆废资源不用就不需要加载。那么,是不是我们就可以悄悄的在场景某个阶段悄悄加载呢?答案是可以的,前提是你自己的逻辑把控好。
再举个例子:LOL,王者荣耀进游戏场景时,10个玩家一起等待加载进度,为什么会有这个步骤?正如上诉所说,100多个英雄(理解为100多个预制),里面只要10个不到的英雄加载到场景里面去,那么其余90多个英雄是不是就相当于废资源英雄呢?如果你把这剩余的英雄全放在游戏节点里面去,那可想而知,你去网吧玩一把LOL,或者上课悄悄加载一把王者荣耀,你的手机要是没蹦的话,你还没开始玩,那么恭喜你,你已经下课了。
上诉解释貌似和内存优化没太大关系,没关系,预制的定义你明白了吗?
我们100多个预制,(音频、动画、反正就是资源),我们场景某个时间段需要用到的,你在这个时间段提前加载他,那么内存就涨上去了,你加载的越多就涨的越多。ios的同事可不会大方的一直给我内存。那么你怎么办,那就往游戏前面看看,不要的预制统统的从内存里面释放掉。参考官方链接https://docs.cocos.com/creator/manual/zh/scripting/load-assets.html#%E8%B5%84%E6%BA%90%E7%9A%84%E4%BE%9D%E8%B5%96%E5%92%8C%E9%87%8A%E6%94%BE注意:资源释放的时候,注意内存泄露。这样,我们就可以保证内存尽可能的减小。
除此之外:也就是我们对资源的优化:pngquant,不明白的同学可单独去了解一下。其次如内存占用图:美术在自作闪图的时候,我们将这些图制作成一个plist文件,工具可采用TexturePackerGUI,也是以上一个优化目的(毕竟当初刚出道的时候可没人这么教我),
除此之外还有如下图的PVR压缩纹理以及ETC1,一般RPG\SLG等有大量图片的游戏才用的到。