当前位置:首页 > 编程笔记 > 正文
已解决

cocos creator 资源管理

来自网友在路上 166866提问 提问时间:2023-10-30 12:59:52阅读次数: 66

最佳答案 问答题库668位专家为你答疑解惑

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

查看全文

99%的人还看了

猜你感兴趣

版权申明

本文"cocos creator 资源管理":http://eshow365.cn/6-27813-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!