cocos creator 对象池使用和说明
2019-12-06 本文已影响0人
呵呵_9e25
cocos creator游戏开发 基础知识点说明
教程目标
通过开发经验给初学者对一些cocos creator2.0+的Api做一些深入的讲解,帮助初学者更好的学习cocos creator,更快速开发小游戏。
效果体验图如下
image.png
我们可以看到我们在未使用对象池(cc.NodePool)
的时候,如果我们创建子弹特别多,那我们游戏的性能会显著的降低,为了解决这个问题我们引入了对象池的使用(cc.NodePool)
,代码如下:
onLoad: function () {
this.state = 3
this.bulletPool = new cc.NodePool();
var initCount = 5;
for (var i = 0; i < initCount; ++i) {
var enemy = cc.instantiate(this.bulletPrefab);
this.bulletPool.put(enemy);
}
var bulletLogic = cc.callFunc(function(target) {
if(this.state <= 0)
return
var bullet
//先判断对象池是否有可用对象
if (this.bulletPool.size() > 0) {
bullet = this.bulletPool.get()
} else {
bullet = cc.instantiate(this.bulletPrefab)
}
bullet.parent = this.node.parent
var pos = this.node.getPosition()
bullet.setPosition(pos)
var finished = cc.callFunc(function(target) {
//消失之后就放回对象池 复用
this.bulletPool.put(bullet);
}, this)
//这个600 就是一个离屏 距离
bullet.runAction(cc.sequence(cc.moveTo(1, pos.x, 200),finished))
this.node.runAction(cc.sequence(cc.delayTime(1),bulletLogic))
}, this)
this.node.runAction(cc.sequence(cc.delayTime(1),bulletLogic))
}
上面代码一堆,没关系,我们下面分解一下
课程内容:
对象池
(cc.NodePool)
涉及知识点
1.new cc.NodePool() 新建对象池
代码:`this.bulletPool = new cc.NodePool();`
2.put方法
回收对象到对象池,回收之后页面节点消失
这个是重点,为啥我们能看到子弹消失,就是通过put方法把它放回了对象池里面,
代码:this.bulletPool.put(bullet);
3.get方法
获取对象池里的对象,这个有一个注意点,就是我们必须先判断对象池里面有没有空闲的对象,如果没有就自己新建一个,否则直接get()取出来就行
代码:
//先判断对象池是否有可用对象
if (this.bulletPool.size() > 0) {
bullet = this.bulletPool.get()
} else {
bullet = cc.instantiate(this.bulletPrefab)
}
基本说完,重点上面也说了,回收对象就能使得节点在界面消失,这是子弹消失的原理。