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)
            }

基本说完,重点上面也说了,回收对象就能使得节点在界面消失,这是子弹消失的原理。


上一篇下一篇

猜你喜欢

热点阅读