接触cocos2d一段时间了,写点开发总结,主要关于性能优化方面。自己写的代码有时候会忽然crash,其实就是内存管理不到位。从同事和网络大牛那里借鉴到很多内存管理的好方法:

  • 采用TexturePackager进行图片拼接(优化内容,减少图片加载时间,减少运行内存)

因为openGl贴图加载都是以2的n次方存放的,所以图片即使是854480的,加载到内存也是10241024的,这样极大的加大了运行内存,也会影响运行效率,拼图后最大化的减少了图片 分辨率不合理的部分,这样贴图的数量也会变少,也可加快加载速度。

  • 采用batchNode的方式绘制,配合TexturePackager使用(优化内容,减少渲染时间)

对于一个独立的精灵来说,每次绘制前都需要对贴图进行一次打开和关闭操作,这样也会增加单帧 绘制时间,而batchNode可以解决这个问题,将零散的贴图拼接在一次,这样绘制的时候,只需要 打开一次贴图,从而加快了渲染数据。注:子贴图必须可以绘制在同一个z级。

  • 对于列表、网格之类的界面元素,采用层级绘制方式,也不是采用单个元素的绘制方式(优化内容,减少渲染时间)

现在对于如装备、头像列表等都是将背景和单个头像组成一个独立的个体,然后对独立个体进行n次绘制, 修改为层级绘制后,可以先绘制所有的背景,再绘制所有的头像,这样背景的打开次数将有n次变为1次,头像也可以用拼图的方式来减少打开次数,这样也可以提高单帧渲染速度。

  • 内容剪裁(优化内容,减少渲染时间)

对于有些存在于背景的内容,在子界面打开时是不可见的,但引擎却不知道,所以还是会去渲染,可以 将这部分内容进行隐藏,在需要显示时再可见,这样也可以提高单帧的渲染速度

  • 注意需要进行文件操作的地方(主要是xml)(优化内容:减少单帧逻辑处理时间)

对于手机来说,文件读取是很慢的(现在计算机的通病),所以在单帧操作中,尽量不要出现文件读取 的逻辑,现在代码中有很对数据的获取都是采用xml检索的方式,这样也会增加单帧的运算时间,从而降低帧数

  • 资源预加载(子博提出)(优化内容,提高体验)

就是在某些对时间不敏感的地方进行预加载从而降低对时间敏感的地方的加载时间,也可以将某些单帧完成的加载内容,放在多帧进行加载,也可以降低单帧的处理时间,提高用户体验(如二级界面打开的部分)



blog comments powered by Disqus

Published

16 June 2013

Tags