侧边栏壁纸
博主头像
落叶人生博主等级

走进秋风,寻找秋天的落叶

  • 累计撰写 130562 篇文章
  • 累计创建 28 个标签
  • 累计收到 9 条评论
标签搜索

目 录CONTENT

文章目录

Cocos2d-js 对象缓冲池cc.pool

2024-05-09 星期四 / 0 评论 / 0 点赞 / 82 阅读 / 6834 字

cc.pool的使用场景 经常创建和销毁的元素,例如打飞机游戏里面的子弹等。 不适用的场景:不是很经常创建的物体,比如背景,建筑等。 如何使用cc.pool 1. 让你的类支持cc.pool 首 先,

cc.pool的使用场景

    经常创建和销毁的元素,例如打飞机游戏里面的子弹等。

    不适用的场景:不是很经常创建的物体,比如背景,建筑等。

如何使用cc.pool

1. 让你的类支持cc.pool

    首 先,你需在需要使用cc.pool来管理的类中实现reuse和unuse方法,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删除所有的可回收对象。

 

本文作者 : 子非鱼 @ 邮箱

版权声明 除非注明,本文由 子非鱼 原创编译

转载请注明出处: http://www.ipastimes.com/post/72.html

广告 广告

评论区