cocos creator 资源管理

cocos creator 在使用过程中,经常需要动态加载远端资源,比日说 用户头像龙骨动画皮肤资源,这些资源不可能都做成 预制体交给 cocos creator 帮助我们管理;

这个时候就需要我们 动态加载远端资源但是 动态加载的资源,cocos creator是不会帮我们自动处理的,需要我们在不使用的时候  手动释放,减小内存控件的占用

 官方文档:Cocos Creator 资源管理

cocos creator 动态资源加载:

动态加载用户头像

public static webSprite(path: String) {
    return new Promise((resolve) => {
        assetManager.loadRemote(`${path}`, (error, texture) => {
            if (!error) {
                let ImgAsset = texture as ImageAsset;
                let tex = new Texture2D();
                tex.image = ImgAsset;
                let sprite = new SpriteFrame();
                sprite.texture = tex;
                // this.spriteLeft.spriteFrame = sprite;
                // 添加计数器引用
                sprite.addRef();
                resolve(sprite);
            } else {
                console.log("网络图片加载出错:", error);
                resolve(null);
            }
        })
    });
}

cocos creator 动态资源卸载: 

页面缓存动态图片的使用:

//记录页面动态加载的图集, 销毁时 释放用
private spriteCacheArray: Array;

使用中途卸载资源:

这里的卸载主要是为了,比如说页面已经关闭了,头像才下载完毕 这个是要 需要现实的 Sprite 已经销毁了,这个时候 直接下载图片资源!

//clone 是 node 用于显示图片的 prefab 
Helper.webSprite(data['Users'][i]['Icon']).then(spriteFrame => {
    //正常显示逻辑
    if (this.spriteCacheArray && spriteFrame && clone) {
        this.spriteCacheArray.push(spriteFrame);
        clone.getChildByPath('icon_bg/Mask/default').getComponent(Sprite).spriteFrame = spriteFrame;
    } else {
        //页面已经销毁了 不存在要显示的 Sprite. 因为是异步操作 所有执行到这里的时候 节点有可能不在了
        if (spriteFrame) {
            spriteFrame.decRef();
            assetManager.releaseAsset(spriteFrame);
        }
    }
});

使用完毕的卸载:

onDestroy() {
    if (this.spriteCacheArray) {
        this.spriteCacheArray.forEach(ele => {
            if (ele) {
                ele.decRef();
                assetManager.releaseAsset(ele);
            }
        });
    }
}

你可能感兴趣的:(Cocos,Creator,资源管理)