cocos2d 缓存池 对象的再利用
2015-07-11 11:53
316 查看
1.简单的叙述说明池
例如,我们知道,游戏的游戏类型跑酷,游戏元素都在不断重复。游戏的内容将继续从屏幕右侧的创建,当元件在屏幕的左侧的,将消失。假设不变new 对象。release 对象 性能影响。怎样优化呢?就涉及到缓存池的概念。再举一个样例:一个主角在一个竞技场中不断杀怪。每次有5个怪出现,杀死一个又会出来一个。
每次出怪就new 怪,死亡怪就release怪。会非常浪费的。
已经死亡的怪,我们简单地给他补满血不就能够反复使用了嘛!像拍电影,一个人不是真正死亡,仅仅是看起来死了。还是能够反复使用的嘛!
2.缓存池简单实现
我们能够事先new10个怪放入到一个数组中。简单把这个数组称作缓存池,事实上就是一个数组。再搞个int的变量表示取数组中第几个怪,初始化为0,表示取第一个怪。
1.当我们想要从屏幕中创建一个新怪时,不去new,而是用那个int变量从数组中取一个怪拿来用。当然拿来用之后,还要简单的初始化下,给他补满血啊。穿上完整衣服等等。再把int变量加1,假设int变量等于数组的长度时。把它归0。
2.当一个怪被主角杀死时,让这怪播完死亡动画后,就remove掉,但不把他全然release掉。
差点儿相同实现就是这样,简单吧!
仅仅是注意初始缓存池。new对象的数量。一般要大于你实际使用的数量。
3.简单代码
//创建缓存池 Vector bonePools; void createBonePools(){ if(bonePools.empty()){ for(int i = 0; i < 30; ++i){ auto oneBone = Bone::create(); bonePools.pushBack(oneBone); } } }
//从缓存池中取一个对象 int _boneIndex; Bone* getOneBone(){ if(_boneIndex == bonePools.size()){ _boneIndex = 0; } Bone* result = bonePools.at(_boneIndex); result->reuseInit();//这个比較重要,反复使用一个元素也要简单初始化一些东西的。之前死亡的人物记得给他补满血 ++_boneIndex; return result; }
cocos2d 缓存池 对象的再利用
相关文章推荐
- cocos2dx toLua 没有PyYAML的解决办法
- cocos2d-x ndk adt mac 路径配置
- cocos2dx 命令解释
- VAssistX使用 分类: cocos2d其他 2015-07-11 09:51 14人阅读 评论(0) 收藏
- (2)cocos2dx在windows环境下中文显示乱码
- Cocos2d使用TexturePacker工具打包生成plist和pvr.ccz文件方法总结
- Cocos2d使用TexturePacker工具打包生成plist和pvr.ccz文件方法总结 分类: cocos2d其他 2015-07-11 09:06 13人阅读 评论(0) 收藏
- 认识TexturePacker的界面 分类: cocos2d其他 2015-07-11 08:56 9人阅读 评论(0) 收藏
- 大海教你学手游2015CocosLua第一季_01环境搭建与场景封装
- 使用Cocos2d-x-3.6创建Lua项目Cocos Code IDE V1.2可调试
- 【Cocos2d-x 游戏开发】 2 --- Button、CCMoveBy
- 【Cocos2d-x】控制音量的滚动条
- [cocos2dx]Mac操作系统下的cocos2dx-lua环境配置
- COCOS2D-X 停止手打所有cpp文件到android.mk
- cocos2dx3.2与2.3的区别和3.2中C++11新特性的应用
- Cocos2dx 3.6 CCLable enableShadow error.
- cocos2d-x box2d 世界刚体初始化流程
- 【独立开发者er Cocos2d-x实战 005】使用Cocos2dx Scale9Sprite使用
- cocos2dx 编写shader 遇到 溢出问题
- 滑块控件CCControlSlider