2024年5月27日发(作者:仰驰丽)
兄弟们,手写自己思考的,那些地方不明白欢迎交流,不对的地方也请和我沟通,拜
托。
孟宝亮 2014.10.22
第一章 Cocos内存优化
Cocos2dx内存优化分为 纹理优化 渲染优化 纹理格式优化 纹理尺寸限制 内
存优化
纹理的优化主要是是对纹理深度进行优化。我们的程序中可以修改默认的纹理深度,
默认纹理深度是RGBA8888 每一个颜色通道会占用8个位,一个像素那么就会占用4个
字节。因此一张图片的所占内存的大小就是图片的宽*高*像素大小。纹理深度可分为几种:
RGBA8888 占用4个字节
RGBA4444 占用2个字节
RGB5A1 占用2个字节
RGB565
RGB888
然后是对渲染的优化,比如我们要渲染两个纹理,纹理1和纹理2,那么在渲染的时
候需要切换纹理,如果渲染纹理1 纹理2 ,那么我们需要切换2次纹理,有什么方法可
以切换一次就可以渲染呢?那就是使用CCSpritBatchNode , 具体思路是什么样的呢?我
们把纹理1和纹理2合并到一张图上,这样我们渲染的时候始终都是一张纹理,就减少了
多个纹理直接切换的操作。
纹理格式的优化。我们常说游戏中使用pvr格式的纹理会增加加载速度,并且占用更
小的内存。但是这种方案是针对于IOS设备的,安卓设备无效的。这是因为IOS对pvr格
式的纹理可以进行硬件加速,而安卓设备还是软件加速。
内存的优化,主要就是内存池的解决方案了。如果我们的游戏在运行的时候频繁的创
建 销毁对象,一来这样的操作过多必然降低效率,二来也会在内存中产生很多的碎片。最
好的方式就是游戏在启动的时候,分配一块内存区域,来保存我们需要的游戏数据。一个
例子就是比如酷跑中的金币,很多金币,你需要每次都创建,然后销毁吗?答案是否定的。
我们可以创建一个池,提前创建好比如100个金币,当金币超出屏幕的时候,我们不销毁,
需要的时候从池中拿出来初始化。这样是不是避免了重复的创建和销毁的操作呢?
第二章 数据的存储处理
数据的存储在操作中是非常多的了,主要也经常使用的两种数据格式xml和json。一
般来讲在本地存储一些数据的时候,比如说存储下游戏的版本号,或者一些其他的游戏数
据,角色的等级,金钱,攻击力,防御力等等数据 ,那么我们可以使用xml格式存储。
对xml文件的操作有很多方案 libxml2 tinyxml2 还有cocos的CCSAXParser 都可以用
来解析。如果需要XML中的中文,那么请使用ICONV库。
那么在网络数据传输的过程中,XML格式就有点大了,相比json就是重量级的了,
所以我们需要使用更轻量级的格式json。Json的好处我就不说了,解析json的库也很多,
2024年5月27日发(作者:仰驰丽)
兄弟们,手写自己思考的,那些地方不明白欢迎交流,不对的地方也请和我沟通,拜
托。
孟宝亮 2014.10.22
第一章 Cocos内存优化
Cocos2dx内存优化分为 纹理优化 渲染优化 纹理格式优化 纹理尺寸限制 内
存优化
纹理的优化主要是是对纹理深度进行优化。我们的程序中可以修改默认的纹理深度,
默认纹理深度是RGBA8888 每一个颜色通道会占用8个位,一个像素那么就会占用4个
字节。因此一张图片的所占内存的大小就是图片的宽*高*像素大小。纹理深度可分为几种:
RGBA8888 占用4个字节
RGBA4444 占用2个字节
RGB5A1 占用2个字节
RGB565
RGB888
然后是对渲染的优化,比如我们要渲染两个纹理,纹理1和纹理2,那么在渲染的时
候需要切换纹理,如果渲染纹理1 纹理2 ,那么我们需要切换2次纹理,有什么方法可
以切换一次就可以渲染呢?那就是使用CCSpritBatchNode , 具体思路是什么样的呢?我
们把纹理1和纹理2合并到一张图上,这样我们渲染的时候始终都是一张纹理,就减少了
多个纹理直接切换的操作。
纹理格式的优化。我们常说游戏中使用pvr格式的纹理会增加加载速度,并且占用更
小的内存。但是这种方案是针对于IOS设备的,安卓设备无效的。这是因为IOS对pvr格
式的纹理可以进行硬件加速,而安卓设备还是软件加速。
内存的优化,主要就是内存池的解决方案了。如果我们的游戏在运行的时候频繁的创
建 销毁对象,一来这样的操作过多必然降低效率,二来也会在内存中产生很多的碎片。最
好的方式就是游戏在启动的时候,分配一块内存区域,来保存我们需要的游戏数据。一个
例子就是比如酷跑中的金币,很多金币,你需要每次都创建,然后销毁吗?答案是否定的。
我们可以创建一个池,提前创建好比如100个金币,当金币超出屏幕的时候,我们不销毁,
需要的时候从池中拿出来初始化。这样是不是避免了重复的创建和销毁的操作呢?
第二章 数据的存储处理
数据的存储在操作中是非常多的了,主要也经常使用的两种数据格式xml和json。一
般来讲在本地存储一些数据的时候,比如说存储下游戏的版本号,或者一些其他的游戏数
据,角色的等级,金钱,攻击力,防御力等等数据 ,那么我们可以使用xml格式存储。
对xml文件的操作有很多方案 libxml2 tinyxml2 还有cocos的CCSAXParser 都可以用
来解析。如果需要XML中的中文,那么请使用ICONV库。
那么在网络数据传输的过程中,XML格式就有点大了,相比json就是重量级的了,
所以我们需要使用更轻量级的格式json。Json的好处我就不说了,解析json的库也很多,