Cocos2d-x   发布时间:2022-05-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了【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,f3);
            this.initData(f1,f3);
        },initData: function (f1,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,f3) {
            this.initData(f1,f3);
            this.setVisible(true);
        }
    }); 
    MySprite.create = function (f1,f3) {
        return new MySprite(f1,f3)
    }
    MySprite.reCreate = function (f1,f3) {
        var pool = cc.pool;
        if (pool.hasObject(MySpritE)) return pool.getFromPool(MySprite,f1,f3);
        return  MySprite.create(f1,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");

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

  5. 删除回收池中的某个对象

    cc.pool.removeObject(object);

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

  6. 清空回收池

    cc.pool.drainAllPools();

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

大佬总结

以上是大佬教程为你收集整理的【cocos2d-js官方文档】十二、对象缓冲池全部内容,希望文章能够帮你解决【cocos2d-js官方文档】十二、对象缓冲池所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。