Cocos Creator 對象池cc.NodePool的使用


對象池cc.NodePool
把層級管理器中的節點拖進資源管理器中就創建了預制體;
let和var 一樣,是聲明變量的關鍵詞, 同一個變量名時,var 即使在{}內也作用全局,let有范圍;
(1)將需要數量的節點創建出來,並放進對象池:
//...
properties: {
enemyPrefab: cc.Prefab
},
onLoad: function () {
this.enemyPool = new cc.NodePool();
let initCount = 5;
for (let i = 0; i < initCount; ++i) {
let enemy = cc.instantiate(this.enemyPrefab); // 創建節點
this.enemyPool.put(enemy); // 通過 putInPool 接口放入對象池
}
}

(2)獲得對象池中儲存的對象了:
// ...
createEnemy: function (parentNode) {
let enemy = null;
if (this.enemyPool.size() > 0) { // 通過 size 接口判斷對象池中是否有空閑的對象
enemy = this.enemyPool.get();

else { // 如果沒有空閑對象,就用 cc.instantiate 重新創建
enemy = cc.instantiate(this.enemyPrefab);
}
enemy.parent = parentNode; // 將生成的敵人加入節點樹
enemy.getComponent('Enemy').init(); //接下來就可以調用 enemy 身上的腳本進行初始化
}

(3)節點退還給對象池,以備之后繼續循環利用,:
// ...
onEnemyKilled: function (enemy) {
this.enemyPool.put(enemy); // 將節點放進對象池,這個方法會同時調用節點的 removeFromParent();
}

myPool.clear(); // 調用這個方法就可以清空對象池


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM