1、对象池,顾名思义就是暂时存放对象的容器;
常用存放prefab,尽可能的减少Canvas画布上节点的挂载。加快加载速度。
2、使用:
    a、准备prefab
    b、初始化对象池---场景初始化加载中,创建需要数量的节点,放到对象池中
        properties: {
            enmyPrefab: cc.Prefab
        },
        onLoad: function () {
            this.enemyPool = new cc.NodePool();
            // NodePool(用来重复创建和销毁节点,官方文档:://docs.cocos.com/creator/api/zh/classes/NodePool.html)。
        }
    c、从对象池中
        createEnemy: function () {
            let enemy = null;
            //c1、当前对象池中的可用对象数量
            if (this.enemyPool.size > 0) {
                //_1、从对象池中获取对象
                eneny= this.enemyPool.get();    
            } else {
                //_2、若没有空闲的对象,也就是对象不够用时,就克隆节点
                enemy = cc.instantiate(this.enemyPrefab);
            }
            //c2、将生成的节点挂载到节点树上
            enemy.parent = parentNode;(或者node.addChild(新节点))
            //c3、调用enemy的脚本进行初始化
            enemy.getComponent('Enemy').init();
        }
    d、将不用的对象回收到对象池中
        onEnemyKilled: function (enemy) {
            this.enemyPool.put(enemy);
        }
    e、清除对象池(切换场景或者节点不再被需要时清空)
        myPool.clear();
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐