Cocos Creator性能优化-4-内存优化

1.什么是内存优化?

通过对游戏的资源包括纹理、声音、数据等进行优化达到减少对游戏运行时内存的占用。

2.为什么需要内存优化?

当游戏运行时发生闪退或者打开时发生崩溃,往往是程序所在占用的内存超过系统的阈值,会被系统强制关闭。因此在开发时,需在保证运行效率的同时,尽量压缩程序运行时所占用的内存。

3.如何内存优化?

1.纹理优化:
1.什么是纹理?
纹理是一张可显示的图像,或一段用于计算的中间数据,通过 UV 坐标映射到渲染物体表面,使之效果更为丰富精彩且真实。

2.为什么要纹理优化?
在游戏中,纹理不仅占据大量的包体,也占据了大量的内存。传统的图片压缩格式(如JPEG、PNG等)虽能减少资源大小,但是不能被GPU直接识别,还是需要先加载到内存通过CPU解码,转换成RGB/RGBA等能被GPU识别的格式,才能传送到GPU进行渲染。在内存中占用的大小要远远大于我们在磁盘中看到的大小

3.如何纹理优化?
压缩纹理,是一种GPU能直接读取并显示的格式,使得图像无需解压即可进行渲染,可节约大量的内存。常见的纹理压缩格式ETC,PVRTC.
在cocosCreator中配置及使用纹理压缩功能

4.纹理压缩相关知识
1.图片加载到内存到占用公式为:
分辨率 * 像素格式通道所占用的位数 / 8 = 内存占用
像素格式-每个像素所使用的颜色通道的组合模式。
像素深度是指存储每个像素所用的位数。
颜色通道是指R,G,B,A -不透明度
常见像素格式有以下(1byte = 8bit)
RGBA4444-每个通道占4位(bit)>4*4 = 16bit=2byte
RGBA8888-每个通道占8位(bit)
>48 = 32bit=4byte
RGB888-每个通道占8位(bit)==>3
8 = 24bit=3byte

2.图片文件格式与纹理格式的区别:
图片文件格式:用于图像信息的存储和传输,有png(无损压缩)、jpg(有损压缩)。称为纹理,但他们并不是纹理格式,不能被GPU直接读取并显示。
纹理格式:是能被GPU所识别的像素/纹理格式。

5.压缩纹理注意点
1.纹理压缩后的图片文件要比原文件大很多。即压缩纹理不适合H5以及小游戏
2.webgl 只支持rgba8888格式。
3.测试工具-: perfdog

2.资源管理:
1.为什么要对资源进行管理?
项目中最消耗内存占用的就是资源。所以要对资源有合理管理。
creator 的资源在内存中的管理方式:
1.存储方式
资源在加载完成后,会以 { uuid : cc.Asset } 的形式被缓存到 cc.assetManager.assets 中,以避免重复加载。
2.引用计数
原理:将资源(可以是对象、内存或磁盘空间等等)的被引用次数保存起来,当被引用次数变为零时就将其释放的过程。

cocos:当资源加载完成会返回 cc.Asset 实例, 所有 cc.Asset 实例都拥有成员函数 addRef 和 decRef。

资源在cocos中的引用计数分为
1.静态引用-编辑器中编辑资源
加载某个资源时会对该资源所依赖的资源引用计数+1
释放某个资源时会对该资源所依赖的资源引用计数-1
2.动态引用-只通过代码动态加载
加载某个资源时会对该资源所依赖的资源引用计数+0
因此需要手动管理引用计数(代码中执行addRef 和 decRef)

//.addRef()
cc.resources.load(“HelloWorld”, cc.SpriteFrame, (err, assets: cc.SpriteFrame) => {
this.sprite.spriteFrame = assets;
this.sprite.spriteFrame.addRef();
});
//decRef();
this.sprite.node.destroy();
​this.sprite.spriteFrame.decRef();

2.如何进行对资源释放?
cocos资源释放方式分为
1.自动释放
在这里插入图片描述
2.手动释放
调用 Asset Manager的接口
releaseAsset-释放资源以及其依赖资源, 这个方法不仅会从 assetManager 中删除资源的缓存引用,还会清理它的资源内容。
releaseUnusedAssets-释放所有没有用到的资源。
releaseAll-释放所有资源。

3.释放检查
Creator 会在自动释放资源之前进行一系列的检查,只有引用计数为0时,才会进行自动释放。

注意点:
1.Asset Manager 只会 自动统计 资源之间的 静态引用,并不能真实地反应资源在游戏中被动态引用的情况,动态引用 还需要 开发者进行控制 以保证资源能够被正确释放。

2.动态加载 的资源必须手动卸载
① 通过引用计数:addRef 和 decRef
② 直接释放:releaseAsset

Cocos Creator中,有一些常见的性能优化方法可以帮助提高游戏的性能: 1. 减少渲染批次:合并相邻节点的渲染批次可以减少绘制调用。可以使用Cocos Creator提供的节点分组功能或者合并节点来减少渲染批次。 2. 使用图集:将游戏中的小图标合并到图集中可以减少纹理切换和内存开销。 3. 控制粒子系统的数量:粒子系统在游戏中可以带来很好的效果,但是过多的粒子会导致性能下降。可以通过控制粒子的数量、生命周期和发射频率来优化性能。 4. 使用连接池:对于频繁创建和销毁的对象,可以使用连接池来重用对象,减少内存分配和垃圾回收的开销。 5. 资源压缩和优化:对游戏中的资源进行压缩和优化,包括图片、音频和视频等。可以使用工具对资源进行压缩,并使用合适的压缩格式和加载策略来提高加载速度和减少内存占用。 6. 避免过多的Update回调:在游戏中,Update回调每帧都会执行,如果有过多的Update回调,会导致性能下降。可以合理使用Update回调,避免不必要的计算和更新。 7. 禁用不需要的物理碰撞检测:如果游戏中不需要物理碰撞检测,可以禁用物理引擎或者禁用不需要进行碰撞检测的节点。 8. 使用合适的碰撞体形状:对于物体的碰撞体,选择合适的形状可以减少碰撞检测的计算量。可以根据物体的形状和特性选择合适的碰撞体形状,比如使用简单的矩形形状代替复杂的多边形形状。 9. 合理使用批量渲染:Cocos Creator提供了批量渲染功能,可以将相邻的节点合并为一个批次进行渲染,减少绘制调用。可以合理使用批量渲染功能来优化性能。 10. 使用性能分析工具:Cocos Creator提供了性能分析工具,可以帮助开发者分析游戏的性能瓶颈,并进行相应的优化。可以使用性能分析工具来定位和解决性能问题。 以上是一些常见的Cocos Creator性能优化方法,根据具体的游戏需求和场景,还可以进行其他针对性的优化。在进行性能优化时,建议先进行性能测试和分析,找出性能瓶颈,并有针对性地进行优化
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值