最新消息: USBMI致力于为网友们分享Windows、安卓、IOS等主流手机系统相关的资讯以及评测、同时提供相关教程、应用、软件下载等服务。

Cocos2dx技术点总结

IT圈 admin 28浏览 0评论

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的库也很多,

发布评论

评论列表 (0)

  1. 暂无评论