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()); },});