enemy.js
cc.Class({ extends: cc.Component, properties: { enemySpeed: 0, //設置加速度 }, //初始化當前節點的y坐標 init: function () { this.node.y = 0; }, onLoad () { }, start () { }, update (dt) { this.node.y += this.enemySpeed; //每幀運動 }, });
game.js
cc.Class({ extends: cc.Component, properties: { enemyPrefab: { default: null, type: cc.Prefab, }, }, 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; // 將生成的敵人加入節點樹 this.enemyNew = enemy; enemy.getComponent('enemy').init(); //接下來就可以調用 enemy 身上的腳本進行初始化, //如果不初始化enemy,在從對象池中獲取this.enemyPool.get();的時候,該enemy身上的腳本參數還接着上次調用的時候; //因為執行this.enemyPool.put();只是把enemy重新放回對象池,並不是真正銷毀;執行this.enemyPool.get()又可以重新獲取出來; }, //監聽鍵盤 setInputControl: function () { cc.systemEvent.on(cc.SystemEvent.EventType.KEY_DOWN, this.onKeyDown, this); }, onKeyDown: function (event) { switch(event.keyCode) { case cc.KEY.t: this.enemyPool.put(this.enemyNew); //點擊鍵盤T鍵銷毀敵人 break; case cc.KEY.c: this.createEnemy(this.node); //點擊C鍵創建敵人 break; } }, onLoad () { this.enemyPool = new cc.NodePool(); //new一個對象池出來 this.setInputControl(); //加載場景后持續監聽鍵盤 }, // start () { // console.log(this.enemyPool.size()); // this.createEnemy(this.node); // }, update (dt) { console.log(this.enemyPool.size()); }, });