cocos creator 资源管理

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

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

官方文档:Cocos Creator 资源管理

cocos creator 动态资源加载:

动态加载用户头像

public static webSprite(path: String) {
    return new Promise<SpriteFrame>((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<SpriteFrame>;

使用中途卸载资源:

这里的卸载主要是为了,比如说页面已经关闭了,头像才下载完毕 这个是要 需要现实的 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);
            }
        });
    }
}
相关推荐
青云交21 小时前
大数据新视界 --大数据大厂之Kubernetes与大数据:容器化部署的最佳实践
数据库·kubernetes·容器编排·资源管理·大数据处理·扩展性、故障恢复·存储持久化·监控、日志管理、性能提升
航行的土豆4 个月前
记笔记从学Typora开始--------------------(1)下载、安装、购买、激活
个人成长·资源管理·typora笔记
小信瑞5 个月前
Altair® (澳汰尔)Grid Engine® 分布式资源管理系统
分布式·自动化·资源管理·高性能计算·澳汰尔·altair·资源管理系统
G皮T8 个月前
【大数据】了解 YARN 架构的基础知识
大数据·hadoop·hdfs·架构·yarn·资源管理·作业调度
little_fat_sheep1 年前
【Unity3D】资源管理
资源管理·textasset·assetdatabase·playerprefs·addressables
四夕立羽1 年前
Unity3d:GameFramework解析:实体,对象池,资源管理,获取计数,引用计数,自动释放
unity3d·资源管理·gameframework·对象池·获取计数引用计数自动释放
G皮T1 年前
【大数据】Flink 详解(五):核心篇 Ⅳ
大数据·分布式·flink·内存管理·分布式计算·流计算·资源管理