cocos creator2.2.0动态图集

/**
 * cocos creator:动态图集
 * 使用理由
 * > 降低drawcall从而提升游戏运行效率
 * 限制
 * > 场景切换时,才会释放动态图鉴(造成内存的消耗)
 * > 同一场景下,最多存在5张
 * > maxsize 2048.2048
 * 
 */
cc.debug.setDisplayStats(true);
// 强制开启动态图集
cc.macro.CLEANUP_IMAGE_CACHE = false;
cc.dynamicAtlasManager.enabled = true;


const {ccclass, property} = cc._decorator;


@ccclass
export default class Helloworld extends cc.Component {

    start () {

        // init logic
        for(let i = 0;i < 10;++i){
            cc.loader.loadRes("HelloWorld",cc.SpriteFrame,(err,spriteFrame:cc.SpriteFrame)=>{
                let node = new cc.Node();
                node.addComponent(cc.Sprite);
                node.getComponent(cc.Sprite).spriteFrame = spriteFrame;
                node.x = -500 + i* 100;
                this.node.addChild(node);
            })
        }
   
        this.node.runAction(cc.sequence(
            cc.delayTime(2),
            cc.callFunc(()=>{
                // 释放资源
                cc.loader.releaseAll();
            }),
            cc.delayTime(2),
            cc.callFunc(()=>{
                // 加新的图片
                cc.loader.loadRes("HelloWorld",cc.SpriteFrame,(err,spriteFrame:cc.SpriteFrame)=>{
                    let node = new cc.Node();
                    node.addComponent(cc.Sprite);
                    node.getComponent(cc.Sprite).spriteFrame = spriteFrame;
                    this.node.addChild(node);
                    console.log("HelloWorld", spriteFrame);
                })
                cc.dynamicAtlasManager.showDebug(true);
            }),
            cc.delayTime(2),
            cc.callFunc(()=>{
                console.log("dynamicAtlasManager");
                // 发现动态合图出现了两张一样的图片
                // 查看源码可知道(manager.js->insertSpriteFrame->atlas.js->insertSpriteFrame),
                // 动态图集是通过texture._id来进行查找的、合图
                // 而texture._id是自增的,所以当原始资源被销毁的时候,再次进行insertSpriteFrame操作时,texture._id的改变
                // 导致了无法从动态图鉴中找到该纹理,从而进行重建
                // 导致问题:图鉴的无效增加-》 图集数量的增加消耗了内存、也会导致Drawcall的升高
                // 解决办法:修改下源码,使用 texture._uuid 来解决
                cc.dynamicAtlasManager.showDebug(true);
            }),
        ))

    }
}





 

你可能感兴趣的:(creator,creator,cocos2d-js)