Cocos2d-x优化方案
优化方向主要有:引擎底层优化、纹理优化、渲染优化、资源缓存、内存优化。
引擎优化:
纹理优化:
纹理是最消耗内存的,而且会降低渲染速率,此部分是重点,下面会详细介绍。
渲染优化:
批次处理:使用CCSpriteBatchNode,准备好Sprite的坐标信息后,进行一次性渲染。
传统渲染处理:不同的切换纹理,不同地加载和渲染。
二者区别:批次处理是一次加载完所有纹理,然后一次渲染,从而提高渲染效率。
资源缓存:
CCSpriteFrameCache和CCTextureCache
缓存比较耗电量,所以一般使用完后要调用remove函数移除缓存,而且在预加载时要显示进度条,可能会影响用户体验,应该根据情况使用。
内存优化:
资源占用的内存优化,如前面几个小节所述。
内存池方案:
游戏启动的时候就分配很大的一块区域,游戏运行过程中不释放,直到退出游戏再释放。平时不是为新资源分配内存,而是把资源加载到内存池里面。多次使用的时候,就不用经过多次的释放和重新加载。这部分可以多了解下C++的内存池管理机制。
优化方案详解
纹理优化:
1. 合成优化:
OpenGL在申请内存存放纹理时,是按2的幂次方申请的,即对应480*320的图片,它申请的是512*512空间。可见,会有相当多的内存被浪费。所以,我们设计的图片,最好是2的幂次方,不然OpenGL最终还是申请2的幂次方内存空间。
由于不是所有图片都刚好能设计成2的幂次方,因此通过“拼图”方法解决,即使用TexturePacker将小图合成大图。
2. 色深优化:
图片所占内存的大小用这条公式计算:高度像素*宽度像素*色深。
如色深RGBA8888,是32个bit,每8bit是一个字节,因此一个像素点占