cc.pool的使用場景
- 經常創建和銷燬的元素,例如打飛機遊戲裏面的子彈等。
- 不適用的場景:不是很經常創建的物體,比如背景,建築等。
如何使用cc.pool
-
讓你的類支持
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); }
-
放入回收池
cc.pool.putInPool(object);
調用此方法將調用對象的
unuse
的方法,並將對象放入回收池。 -
從回收池回收對象
var object = cc.pool.getFromPool("MySprite", args);
當你需要從回收池中取出一個對象,你可以調用
getFromPool
傳入對象的class,以及傳入需要傳入的初始化參數,這些參數將被傳入reuse方法中,cc.pool
將自動調用reuse方法。 -
判斷回收池中是否有可用對象
var exist = cc.pool.hasObject("MySprite");
該方法用於查找回收池中是否存在
MySprite
類的可回收對象。 -
刪除回收池中的某個對象
cc.pool.removeObject(object);
將你要刪除的對象傳入,該對象將會從回收池刪除。
-
清空回收池
cc.pool.drainAllPools();
當你需要清除所有回收池中的對象,例如完成遊戲要進入其他頁面,舊頁面中的可回收對象不再有用了,爲避免不必要的內存佔用,你可以使用
drainAllPools
刪除所有的可回收對象。