【cocos2d-js官方文档】十二、对象缓冲池

cc.pool的使用场景

  • 经常创建和销毁的元素,例如打飞机游戏里面的子弹等。
  • 不适用的场景:不是很经常创建的物体,比如背景,建筑等。

如何使用cc.pool

  1. 让你的类支持cc.pool

    首先,你需在需要使用cc.pool来管理的类中实现reuseunuse方法,cc.pool在执行putInPool时将调用该对象的unuse方法,可以在unuse中完成进入回收池前的操作,reuse是当你要从回收池中取出对象时的重新初始化操作,你可以将这个对象初始化为重新可用的状态。

    var MySprite = cc.Sprite.extend({
        _hp: 0,
        _sp: 0,
        _mp: 0,
        ctor: function (f1, f2, f3) {
            this._super(f1, f2, f3);
            this.initData(f1, f2, f3);
        },
        initData: function (f1, f2, f3) {
            this._hp = f1;
            this._mp = f2;
            this._sp = f3;
        },
        unuse: function () {
            this._hp = 0;
            this._mp = 0;
            this._sp = 0;
            this.retain();//if in jsb
            this.setVisible(false);
            this.removeFromParent(true);
        },
        reuse: function (f1, f2, f3) {
            this.initData(f1, f2, f3);
            this.setVisible(true);
        }
    });
    MySprite.create = function (f1, f2, f3) {
        return new MySprite(f1, f2, f3)
    }
    MySprite.reCreate = function (f1, f2, f3) {
        var pool = cc.pool;
        if (pool.hasObject(MySprite)) return pool.getFromPool(MySprite, f1, f2, f3);
        return  MySprite.create(f1, f2, f3);
    }
    
  2. 放入回收池
    cc.pool.putInPool(object);
    

    调用此方法将调用对象的unuse的方法,并将对象放入回收池。

  3. 从回收池回收对象
    var object = cc.pool.getFromPool("MySprite", args);
    

    当你需要从回收池中取出一个对象,你可以调用getFromPool传入对象的class,以及传入需要传入的初始化参数,这些参数将被传入reuse方法中,cc.pool将自动调用reuse方法。

  4. 判断回收池中是否有可用对象
    var exist = cc.pool.hasObject("MySprite");
    

    该方法用于查找回收池中是否存在MySprite类的可回收对象。

  5. 删除回收池中的某个对象
    cc.pool.removeObject(object);
    

    将你要删除的对象传入,该对象将会从回收池删除。

  6. 清空回收池
    cc.pool.drainAllPools();
    

    当你需要清除所有回收池中的对象,例如完成游戏要进入其他页面,旧页面中的可回收对象不再有用了,为避免不必要的内存占用,你可以使用drainAllPools删除所有的可回收对象。

时间: 2024-10-11 09:32:17

【cocos2d-js官方文档】十二、对象缓冲池的相关文章

ArcGIS API For JS官方文档解析教程

ArcGIS API For JavaScript(八)之Arcade ArcGIS API For JavaScript官方文档(一)之关于API ArcGIS API For JavaScript官方文档(一)之默认API配置 ArcGIS API For JavaScript官方文档(七)之编辑 ArcGIS API For Javascript官方文档(三)之从Web服务器取回数据 ArcGIS API For JavaScript官方文档(二)之默认的API字符串 ArcGIS API

【cocos2d-js官方文档】二十二、project.json

概述 项目相关配置,由原来的cocos2d.js中转移到project.json中,该文件需要与index.html同级,一般建议放在根目录下. 由原来的cocos2d.js改为project.json的好处如下: 原来的cocos2d.js中参杂了一些逻辑代码,无法很好体现其就是作为项目的配置文件. 用json格式作为配置文件会更友好.也可以使得cocos-console.cocos-utils,甚至是用户自定义脚本工具能够使用同一个配置文件. 字段说明 debugMode 相当于原来的COC

【cocos2d-js官方文档】二十五、Cocos2d-JS v3.0中的单例对象

为何将单例模式移除 在Cocos2d-JS v3.0之前.全部API差点儿都是从Cocos2d-x中移植过来的,这是Cocos2d生态圈统一性的重要一环.可惜的是,这样的统一性也在非常大程度上限制了Cocos2d-html5的发展,有一些在C++中非常有意义的涉及搬到Html5平台后却使得Cocos2d-html5变得臃肿.所以在3.0版中,我们决定将一些API改造成更适合JavaScript开发者的API.这篇文档中将要展示的是单例类的改造. 拿cc.SpriteFrameCache为例: /

【cocos2d-js官方文档】二十四、如何在android平台上使用js直接调用Java方法

在cocos2d-js 3.0beta中加入了一个新特性,在android平台上我们可以通过反射直接在js中调用java的静态方法.它的使用方法很简单: var o = jsb.reflection.callStaticMethod(className, methodName, methodSignature, parameters...) 在callStaticMethod方法中,我们通过传入Java的类名,方法名,方法签名,参数就可以直接调用Java的静态方法,并且可以获得Java方法的返回

【cocos2d-js官方文档】二十、moduleConfig.json

概述 该配置文件相当于v2版本中的jsloader.js.改造的目的是为了使得配置纯粹化,同时也能比较好的支持cocos-console.cocos-utils甚至是用户自定义脚本工具. 字段说明 module 配置各个模块的js列表.key名即为模块名称.这些key名将会在project.json的modules字段中使用.倘若不清楚project.json里面究竟有哪些模块可以配置,就可以直接查看该文件. 每个模块的配置对象是一个数组,数组项分两种,一种是模块名,一种是js路径. 例如: "

【cocos2d-js官方文档】二十三、如何在IOS平台上使用js直接调用OC方法

在Cocos2d-JS v3.0 RC2中,与Android上js调用Java一样,Cocos2d-JS也提供了在iOS和Mac上js直接调用Objective-C的方法,示例代码如下: var ojb = jsb.reflection.callStaticMethod(className, methodNmae, arg1, arg2, .....); 在jsb.reflection.callStaticMethod方法中,我们通过传入OC的类名,方法名,参数就可以直接调用OC的静态方法,并且

【cocos2d-js官方文档】二、资源管理器Assets Manager

这篇文档将介绍Cocos2d-JS 3.0的一个重量级新特性:资源管理器(仅支持JSB).资源管理器是为游戏运行时的资源热更新而设计的,这里的资源可以是图片,音频甚至游戏脚本本身.使用资源管理器,你将可以上传新的资源到你的服务器,你的游戏会跟踪远程服务器上的修改,将新的资源下载到用户的设备上并在游戏中使用新的资源.就这样,全新的设计,新的游玩体验甚至全新的游戏内容都将立刻被推送到你的用户手上.重要的是,你不需要针对各个渠道去重新打包你的应用并经历痛苦的应用更新审核,这个过程没有任何成本! 使用场

Hui 2.x.js 官方文档

基础方法 // 判断值是否是指定数据类型 var result = hui.isTargetType("白签软件", "string"); //=>true var result = hui.isTargetType(123, "number"); // =>true var result = hui.isTargetType("false", "boolean"); // =>false

OTA Update官方文档(二,OTA 打包工具)

写在前面: OTA打包工具ota_from_target_files(build/tools/releasetools/目录下)可以为我们创建两种类型的更新包:整包和增量包.打包工具一般来说会对我们称之为目标文件(target-files.zip)进行打包,该目标文件是有Android编译系统产生,通常可在终端下使用make otapackage生成. 一.整包升级 一个整包包含了Android设备的整个终态(system/boot/recovery分区),只要设备可以接收更新包并且进入reco

【cocos2d-js官方文档】二十一、v3相对于v2版本的api变动

CCAudio.js SimpleAudioEngine.js改名为CCAudio.js. AudioEngine中删除了以下几个方法: preloadMusic preloadEffect isFormatSupported preloadSound cc.AudioEngine.end被移到了实例中,而不是作为类的静态方法. cc.textureCache 删除了以下的几个api: cc.loadImg cc.loadImage.handler cc.computeImageFormatTy