另一个能有效提高内存和计算效率的是对象池的使用。其本质与缓存类似,即希望能减少那些频繁使用的对象的重复创建和销毁,例如飞行射击类游戏中的子弹。使用对象池机制能带来两方面的收益,首先是减少对象初始化阶段的重复计算,其次是避免反复地向操作系统申请归还内存。一个很好的例子就是捕鱼游戏中的鱼,鱼和鱼之间的属性是类似的,不一样的仅仅是当前的坐标位置及正在播放的动作帧。那么,当鱼游到屏幕后,可以不对其进行销毁,而是暂存起来。某一时刻需要重新创建鱼时,我们可以将其从对象池中取出,重新申请内存并初始化,这样就大大减轻了cup的负担。
对象池和缓存很像,但比内存更抽象,也更简单一些,因为我们不需要考虑从哪里加载的问题:都已经被抽象为初始化函数了。而且更简单化的是,加入对象池的每一个对象都是无差别的,我们不需要对每个对象进行特定的标记,直接取出任意一个未使用的对象即可。
看完上面的描述,读者应该有了初步的认识:缓存是一个字典,而对象池则是一个数组。得益于引用计数的内存管理机制,只需要在数组上做适当封装就可以提供一个对象池的功能了。尽管如此,一个高效实现的对象池还需考虑如何有效地处理对象的生成和归还,以及占用内存的动态增长等问题。因此,我们不妨借助前人成果,在已有对象池的基础上搭建适合我们游戏使用的对象池。
以上摘自《cocos2d-x高级开发教程》火烈鸟网络科技 编著

对象池是提高内存和计算效率的有效手段,尤其适用于频繁创建和销毁的游戏对象,如子弹。通过对象池,减少重复初始化计算,避免频繁的内存申请与释放。以捕鱼游戏中鱼的例子说明,鱼游出屏幕后存储在对象池,需要时重新激活,减轻CPU负担。对象池与缓存不同,对象无差别,直接取用。高效的对象池需要考虑对象生成、归还及内存动态管理。本文基于cocos2d-x,探讨如何构建游戏适用的对象池。
最低0.47元/天 解锁文章
610

被折叠的 条评论
为什么被折叠?



