使用代码来加载资源和释放资源

简介:

资源不只是可以通过编辑器绑定获取.

其实他还可以使用代码来动态加载.


cc.loader


1.它有3个默认的Pipeline(管道):

(1)assetLoader:主要用于加载资源,加载asset类型资源和释放这些资源

(2)downloader:主要用于下载文件,文本,图像,脚本,声音,字体,自定义的download

(3)loader:第三个是默认的Pipeline可以加载json,image,plist,fnt,uuid;

2.资源分为本地(assets目录下)和远程资源

3.加载分为同步和异步, cc.Loader加载资源是 异步的




本地资源加载


1在代码里加载资源必须要求资源放在assets/resources文件夹下

因为这是一种优化策略:根据场景的依赖关系来打包我们的资源

就是说你这个资源用到了,他才打包,如果没用到他就不打包.

这样能够节省资源,去掉无用的资源, 在代码里使用随时有可能去掉

他认为不用的资源,但是无法判断在代码里加载的资源是哪些,

所以使用一种方案,所有resources目录下的资源都会被打包进去.

所以资源你不在代码里加载的,不要放在resources目录下.

blob.png

2加载的时候资源url不需要加assets/resources这个部分


3.cc.loader.loadRes(url,onComplete回调函数)

4.loadResArray([],type类型,progressCallback,completeCallback);

5.loadResDir(url[type][progressCallback][completeCallback])

他是加载一个路劲下的资源

6getRes(url,[type]); 获取资源id



加载播放一个声音mp3 第二个参数是加载完成的回调函数

加载完后在回调函数里进行播放即可.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
     local_load:  function (){
     //本地加载声音
     //第一个参数是url 不要后缀名
     cc.loader.loadRes( "bgFight" , function (err,prefab){
     if (err){
     //这里就是有错误发生
     console.log(err);
     return ;
     }
     //这里就是没出错 并且输出他的信息
     console.log(prefab);
     //因为他是一个audio Clip
     this .audio.clip = prefab;
     //播放
     console.log( "播放" );
     this .audio.play();
     }.bind( this ));
     },


加载图片


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
     local_load:  function (){
     //和声音不同 这里要写加载的类型
     cc.loader.loadRes( "texture/powered" ,cc.SpriteFrame,
     function (err,pre){
     //加载资源的回调函数
     if (err){
     //这里就是有错误发生
     console.log(err);
     return ;
     }
     //否则这里就是spriteFrame对象
     console.log(pre);
     this .spr.spriteFrame = pre;
     }.bind( this ));
     }

获取资源getRes 例如一个游戏,在进入下一个场景之前,有一个场景

加载资源,那么到了新的场景之后,我们就找到这个加载好的资源







远程资源加载


1 cc.loader.load(url,结束回调函数);

使用互联网上 或者远程部署的图片

2 cc.loader.load({url"",type""},结束回调函数);

3 远程加载任意类型文件


去百度一张图片  或者自己搭建一个web服务器

blob.png



1
2
3
4
5
6
7
8
9
10
11
12
     //远程加载
     cc.loader.load( "http://game.people.com.cn/NMediaFile/2015/1029/MAIN201510290900000533552743089.jpg"
     , function (err,ret){
     //他没有type 他返回的是cc.Texture2D对象
     if (err){
     console.log(err);
     return ;
     }
     //因为这个返回的是 cc.Texture2D的对象
     //所以需要调用这个设置一下
     this .spr.spriteFrame.setTexture(ret);
     }.bind( this ));


blob.png  成功加载了但是他变得很小,如果想用原始大小呢


只需要设置精灵大小为这个 texture2D的大小即可 使用他默认大小

1
this .spr.node.setContentSize(ret.getContentSize())


blob.png



从服务器加载一个mp3播放,有可能你的url没有后缀名,

使用第二种方法 ,就可以指定type啦,有后缀名也可以指定




1
2
3
4
5
6
7
     cc.loader.load({url:  "http://127.0.0.1:8001/asdbp.mp3" ,type: "mp3" },
     function (err,ret){
     
     console.log( "播放" );
     this .audio.clip = ret;
     this .audio.play();
     }.bind( this ));


加载json数据

1
2
3
4
5
6
cc.loader.load({url" ,
     function (err,ret){
         
         console.log(ret);
     }
)


就是说你想要什么类型 只要在type添加就行

1
cc.loader.load({url "http://127.0.0.1:8001/psonsetn.abced" ,type: "abced" } ,





资源卸载


1.每个场景有个自动释放资源,勾选上这个场景的资源会自动释放,

不勾选上这个场景的资源不释放.

还有个延时加载资源:他的作用是如果关闭,那这个场景间接或直接递归

依赖的所有资源都将被加载,全部加载后才会触发场景切换.

如果开启:

这个场景直接或间接依赖的所有贴图,粒子和声音都将被延迟到场景

切换后才加载,使场景加载速度极大提升,同时,玩家进入场景后可能会

看到一些资源陆续显示出来,并且激活,这种方式适合网页游戏.

注意,spine和TieldMap依赖的资源永远都不会被延迟加载.

blob.png

2.代码加载的资源,默认是不会收这个选项的影响的,除非设置

setAutoRelease(url,bool)

使用这个 API 可以在单个资源上改变这个默认行为,

强制在切换场景时保留或者释放指定资源。



3.手动释放资源

loadRes/releaseRes

load/release

releaseAsset(资源对象的object)


我加载一个图片,异步加载好后 立刻释放, 然后5秒之后

在显示图片,他就显示不出来了,因为他被释放掉了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
     local_load:  function (){
     //和声音不同 这里要写加载的类型
     cc.loader.loadRes( "texture/powered" ,cc.SpriteFrame,
     function (err,pre){
     //加载资源的回调函数
     if (err){
     //这里就是有错误发生
     console.log(err);
     return ;
     }
     ////////////异步加载好后 立刻释放
     cc.loader.releaseRes( "texture/powered" ,cc.SpriteFrame);
     
     //否则这里就是spriteFrame对象
     console.log(cc.loader.getRes( "texture/powered" ),cc.SpriteFrame);
     
     }.bind( this ));
         this .scheduleOnce( function (){
     this .spr.spriteFrame = 
     cc.loader.getRes( "texture/powered" ,cc.SpriteFrame);
     }.bind( this ),5);






 本文转自超级极客51CTO博客,原文链接:http://blog.51cto.com/12158490/2066813,如需转载请自行联系原作者







相关文章
|
2天前
|
人工智能 JSON 供应链
畅用7个月无影 JVS Claw |手把手教你把JVS改造成「科研与产业地理情报可视化大师」
LucianaiB分享零成本畅用JVS Claw教程(学生认证享7个月使用权),并开源GeoMind项目——将JVS改造为科研与产业地理情报可视化AI助手,支持飞书文档解析、地理编码与腾讯地图可视化,助力产业关系图谱构建。
23276 2
畅用7个月无影 JVS Claw |手把手教你把JVS改造成「科研与产业地理情报可视化大师」
|
4天前
|
人工智能 API 开发工具
Claude Code国内安装:2026最新保姆教程(附cc-switch配置)
Claude Code是我目前最推荐的AI编程工具,没有之一。 它可能不是最简单的,但绝对是上限最高的。一旦跑通安装、接上模型、定好规范,你会发现很多原本需要几小时的工作,现在几分钟就能搞定。 这套方案的核心优势就三个字:可控性。你不用依赖任何不稳定服务,所有组件都在自己手里。模型效果不好?换一个。框架更新了?自己决定升不升。 这才是AI时代开发者该有的姿势——不是被动等喂饭,而是主动搭建自己的生产力基础设施。 希望这篇保姆教程,能帮你顺利上车。做出你自己的作品。
6850 13
Claude Code国内安装:2026最新保姆教程(附cc-switch配置)
|
11天前
|
缓存 人工智能 自然语言处理
我对比了8个Claude API中转站,踩了不少坑,总结给你
本文是个人开发者耗时1周实测的8大Claude中转平台横向评测,聚焦Claude Code真实体验:以加权均价(¥/M token)、内部汇率、缓存支持、模型真实性及稳定性为核心指标。
4409 23
|
6天前
|
人工智能 缓存 BI
Claude Code + DeepSeek V4-Pro 真实评测:除了贵,没别的毛病
JeecgBoot AI专题研究 把 Claude Code 接入 DeepSeek V4Pro,跑完 Skills —— OA 审批、大屏、报表、部署 5 大实战场景后的真实体验 ![](https://oscimg.oschina.net/oscnet/up608d34aeb6bafc47f
2555 8
Claude Code + DeepSeek V4-Pro 真实评测:除了贵,没别的毛病
|
7天前
|
人工智能 JSON BI
DeepSeek V4 来了!超越 Claude Sonnet 4.5,赶紧对接 Claude Code 体验一把
JeecgBoot AI专题研究 把 Claude Code 接入 DeepSeek V4Pro 的真实体验与避坑记录 本文记录我将 Claude Code 对接 DeepSeek 最新模型(V4Pro)后的真实体验,测试了 Skills 自动化查询和积木报表 AI 建表两个场景——有惊喜,也踩
3102 10
|
23天前
|
人工智能 自然语言处理 安全
Claude Code 全攻略:命令大全 + 实战工作流(建议收藏)
本文介绍了Claude Code终端AI助手的使用指南,主要内容包括:1)常用命令如版本查看、项目启动和更新;2)三种工作模式切换及界面说明;3)核心功能指令速查表,包含初始化、压缩对话、清除历史等操作;4)详细解析了/init、/help、/clear、/compact、/memory等关键命令的使用场景和语法。文章通过丰富的界面截图和场景示例,帮助开发者快速掌握如何通过命令行和交互界面高效使用Claude Code进行项目开发,特别强调了CLAUDE.md文件作为项目知识库的核心作用。
20052 61
Claude Code 全攻略:命令大全 + 实战工作流(建议收藏)

热门文章

最新文章