【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刪除所有的可回收對象。

發佈了51 篇原創文章 · 獲贊 73 · 訪問量 52萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章