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 缓存池 对象的再利用

版权声明:本文博客原创文章,博客,未经同意,不得转载。

cocos2d 缓存池 对象的再利用的更多相关文章

  1. UITableView系列(1)---Apple缓存池机制

    一.概述 关于UITableView的基本使用, 其实十分简单.但是做App最重要的之一就是细致,技术方面要做到细致, 必须深入了解底层, 才能做出优化让程序跑得更快.那么这一系列文章从我实际项目中获 ...

  2. IOS tableView的性能优化(缓存池)

    使用缓存池(标识类型) 1.通过 一个 标识 去 缓存池 中寻找可循环得用的cell 2.如果缓存池找不到可循环得用的cell:创建一个新的cell(给cell贴个标识) 3.给cell设置新的数据 ...

  3. iOS开发:一个瀑布流的设计与实现(已实现缓存池功能,该功能使得瀑布流cell可以循环利用)

    一个瀑布流的实现有三种方式: 继承自UIScrollView,仿写UITableView的dataSource和delegate,创造一个缓存池用来实现循环利用cell 写多个UITableview( ...

  4. 基于.net的分布式系统限流组件 C# DataGridView绑定List对象时,利用BindingList来实现增删查改 .net中ThreadPool与Task的认识总结 C# 排序技术研究与对比 基于.net的通用内存缓存模型组件 Scala学习笔记:重要语法特性

    基于.net的分布式系统限流组件   在互联网应用中,流量洪峰是常有的事情.在应对流量洪峰时,通用的处理模式一般有排队.限流,这样可以非常直接有效的保护系统,防止系统被打爆.另外,通过限流技术手段,可 ...

  5. Unity日记—对象缓存池

    最近都在忙别的事了,今天忙里偷闲了解了一下对象池是啥玩意,简单记录一下. 还是个正在学习的萌新,如果写的不好请见谅. 1.对象池是啥 在了解对象池之后,我才意识到以前写的代码有多么蠢,当场景中有一些重 ...

  6. javascript设计模式学习之四——单例模式,缓存与对象池

    单例模式的定义:确保一个实例,并提供全局访问. 惰性单例的定义:只在需要的时候才创建对象. 在开发中,有些对象往往只需要一个,比如线程池.全局缓存.浏览器中的window对象等. java中的单例 关 ...

  7. 【iOS开发-68】APP下载案例:利用tableView自带的cell布局+缓存池cell复用时注意button状态的检查

    (1)效果 (2)源码与资源下载 http://pan.baidu.com/s/1pJLo2PP (3)总结 --核心是利用UITableView里面自带的cell来制作样式同样的cell. 与之对应 ...

  8. Unity3d 动态加载场景物件与缓存池的使用

    聊聊Unity3d动态加载场景物件那些事儿. 众所周知,在策划或美术设计完游戏场景地图后,一个场景中可能会存在成千上万个小的物件,比如石头,木箱子,油桶,栅栏等等等等,这些物件并不是游戏中的道具,仅仅 ...

  9. 深入剖析Java中的装箱和拆箱(缓存池技术)

    以下是本文的目录大纲: 一.什么是装箱?什么是拆箱? 简单一点说,装箱就是  自动将基本数据类型转换为包装器类型:拆箱就是  自动将包装器类型转换为基本数据类型. 二.装箱和拆箱是如何实现的 1:反编 ...

随机推荐

  1. JDBC调用存储过程

    一. JDBC调用存储过程 (1)使用存储过程SQL编写的程序代码,等一段语句和控制流语句.在创建时被编译成机器代码和存储在数据库中的client转让. 存储过程具有以下优势: 1.所生成的机器代码被 ...

  2. [原创].NET 业务框架开发实战之十 第一阶段总结,深入浅出,水到渠成(后篇)

    原文:[原创].NET 业务框架开发实战之十 第一阶段总结,深入浅出,水到渠成(后篇) .NET 业务框架开发实战之十 第一阶段总结,深入浅出,水到渠成(后篇) 前言:接着上篇来. 系列文章链接: [ ...

  3. IBatis.net初步使用

    最近加班比较忙,时间也比较琐碎,蛮久没有写东西了.这次就总结一下自己使用IBatis.net的一些总结吧. IBatis简介 IBatis.net是一款开源的Orm框架,应该算是从java的IBati ...

  4. JMS ActiveMQ研究文档

    1. 背景 当前,CORBA.DCOM.RMI等RPC中间件技术已广泛应用于各个领域.但是面对规模和复杂度都越来越高的分布式系统,这些技术也显示出其局限性:(1)同步通信:客户发出调用后,必须等待服务 ...

  5. 每天的学习经验:SharePoint 2013 定义自己添加的产品清单。Callout菜单项、文档关注、SharePoint服务机端对象模型查询

    前言: 前一段时间一直都比較忙.没有什么时间进行总结,刚好节前项目上线.同一时候趁着放假能够好好的对之前遇到的一些问题进行总结. 主要内容有使用SharePoint服务端对象模型进行查询.为Share ...

  6. 使用shell/python获取hostname/fqdn释疑(转)

    一直以来被Linux的hostname和fqdn(Fully Qualified Domain Name)困惑了好久,今天专门抽时间把它们的使用细节弄清了. 一.设置hostname/fqdn 在Li ...

  7. Android应用公布的准备——生成渠道包

    我们须要使用一个变量标明该app的渠道.通常我们能够在manifest中的application节点下声明.例如以下. <meta-data android:name="CHANNEL ...

  8. css javascript 自动化压缩(保存后即自动生成压缩文件)

    先上图:

  9. 随着MapReduce job实现去加重,多种输出文件夹

    总结以往的工作中遇到的一个问题. 背景: 操作和维护与scribe从apacheserver一再被推到日志记录,所以在这里ETL处理正在进行的重.有根据业务的输出类型是用于多文件夹一个需求.方便挂分区 ...

  10. 【转】Oracle Outline使用方法及注意事项

    概要  Oracle Outline是用来保持SQL运行计划(execution plan)的一个工具. 我们能够通过outline工具防止SQL运行计划在数据库环境变更(如统计信息,部分參数等)而引 ...