cocos2d-x 对象池机制:可回收与重复使用
2014-02-22 23:42
926 查看
另一个能有效提高内存和计算效率的是对象池的使用。其本质与缓存类似,即希望能减少那些频繁使用的对象的重复创建和销毁,例如飞行射击类游戏中的子弹。使用对象池机制能带来两方面的收益,首先是减少对象初始化阶段的重复计算,其次是避免反复地向操作系统申请归还内存。一个很好的例子就是捕鱼游戏中的鱼,鱼和鱼之间的属性是类似的,不一样的仅仅是当前的坐标位置及正在播放的动作帧。那么,当鱼游到屏幕后,可以不对其进行销毁,而是暂存起来。某一时刻需要重新创建鱼时,我们可以将其从对象池中取出,重新申请内存并初始化,这样就大大减轻了cup的负担。
对象池和缓存很像,但比内存更抽象,也更简单一些,因为我们不需要考虑从哪里加载的问题:都已经被抽象为初始化函数了。而且更简单化的是,加入对象池的每一个对象都是无差别的,我们不需要对每个对象进行特定的标记,直接取出任意一个未使用的对象即可。
看完上面的描述,读者应该有了初步的认识:缓存是一个字典,而对象池则是一个数组。得益于引用计数的内存管理机制,只需要在数组上做适当封装就可以提供一个对象池的功能了。尽管如此,一个高效实现的对象池还需考虑如何有效地处理对象的生成和归还,以及占用内存的动态增长等问题。因此,我们不妨借助前人成果,在已有对象池的基础上搭建适合我们游戏使用的对象池。
以上摘自《cocos2d-x高级开发教程》火烈鸟网络科技 编著
对象池和缓存很像,但比内存更抽象,也更简单一些,因为我们不需要考虑从哪里加载的问题:都已经被抽象为初始化函数了。而且更简单化的是,加入对象池的每一个对象都是无差别的,我们不需要对每个对象进行特定的标记,直接取出任意一个未使用的对象即可。
看完上面的描述,读者应该有了初步的认识:缓存是一个字典,而对象池则是一个数组。得益于引用计数的内存管理机制,只需要在数组上做适当封装就可以提供一个对象池的功能了。尽管如此,一个高效实现的对象池还需考虑如何有效地处理对象的生成和归还,以及占用内存的动态增长等问题。因此,我们不妨借助前人成果,在已有对象池的基础上搭建适合我们游戏使用的对象池。
以上摘自《cocos2d-x高级开发教程》火烈鸟网络科技 编著
相关文章推荐
- 在使用VS创建 cocos2d-x 项目时遇到的一些问题
- Cocos2d-x 缩放以后的触摸判断
- Cocos2d-x 坐标转换
- cocos2d-x 坐标系总结(从如何判断精灵是否在屏幕可见范围谈起)
- Cocos2D-x学习:核心类----几个主要核心类之间的配合关系
- Cocos2D-x学习:核心类----CCDirector
- Win7(64位)下 vs2012 + cocos2dx2.2配置
- COCOS2DX 3.0 学习笔记:从源码分析Cocos2dx 3.0 Director类
- 无需Cgwin打包cocos2dx APK。
- 在Mac+LDT中搭建quick-cocos2d-x的lua开发环境
- cocos2d-x环境安装
- How To Make A Simple iPhone Game with Cocos2D 3.0 Tutorial
- cocos2d动作家族族谱
- 十四 手游开发神器 cocos2d-x editor 之串联游戏流程
- 十二 手游开发神器 cocos2d-x editor 之游戏暂停悬浮层
- 十一 手游开发神器 cocos2d-x editor 之音乐和音效
- cocos2d-x之系统时间和随机数 .
- cocos2d-x编译问题集合之error C2440: “类型转换”: 无法从“void (__thiscall ::* )(void)”转换为“
- cocos2d-x 菜鸟编塔防 05 预加载资源
- 详解Cocos2d-X中宏CC_DLL