美文网首页
cocos creator 对象池使用和说明

cocos creator 对象池使用和说明

作者: 呵呵_9e25 | 来源:发表于2019-12-06 16:24 被阅读0次

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

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


    相关文章

      网友评论

          本文标题:cocos creator 对象池使用和说明

          本文链接:https://www.haomeiwen.com/subject/ensegctx.html