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

cc.pool的使用场景

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

如何使用cc.pool

  1. 让你的类支持cc.pool

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

    1.   var MySprite = cc.Sprite.extend({
    2.   _hp: 0,
    3.   _sp: 0,
    4.   _mp: 0,
    5.   ctor: function (f1, f2, f3) {
    6.   this._super(f1, f2, f3);
    7.   this.initData(f1, f2, f3);
    8.   },
    9.   initData: function (f1, f2, f3) {
    10.   this._hp = f1;
    11.   this._mp = f2;
    12.   this._sp = f3;
    13.   },
    14.   unuse: function () {
    15.   this._hp = 0;
    16.   this._mp = 0;
    17.   this._sp = 0;
    18.   this.retain();//if in jsb
    19.   this.setVisible(false);
    20.   this.removeFromParent(true);
    21.   },
    22.   reuse: function (f1, f2, f3) {
    23.   this.initData(f1, f2, f3);
    24.   this.setVisible(true);
    25.   }
    26.   });
    27.   MySprite.create = function (f1, f2, f3) {
    28.   return new MySprite(f1, f2, f3)
    29.   }
    30.   MySprite.reCreate = function (f1, f2, f3) {
    31.   var pool = cc.pool;
    32.   if (pool.hasObject(MySprite)) return pool.getFromPool(MySprite, f1, f2, f3);
    33.   return MySprite.create(f1, f2, f3);
    34.   }
  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删除所有的可回收对象。

转载请注明:https://blog.csdn.net/qinning199/article/details/41900265

相关文章

    本文实践自 RayWenderlich、Ali Hafizji 的文章《...
Cocos-code-ide使用入门学习地点:杭州滨江邮箱:appdevzw@1...
第一次開始用手游引擎挺激动!!!进入正题。下载资源1:从C...
    Cocos2d-x是一款强大的基于OpenGLES的跨平台游戏开发...
1.  来源 QuickV3sample项目中的2048样例游戏,以及最近《...
   Cocos2d-x3.x已经支持使用CMake来进行构建了,这里尝试...