使用代码来加载资源和释放资源
admin
2023-02-11 11:00:15
0

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

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


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目录下.

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

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 第二个参数是加载完成的回调函数

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


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


加载图片


    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服务器

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



    //远程加载
    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));


使用代码来加载资源和释放资源  成功加载了但是他变得很小,如果想用原始大小呢


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

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


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



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

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




    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数据

cc.loader.load({url" ,
    function(err,ret){
        
        console.log(ret);
    }
)


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

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





资源卸载


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

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

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

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

如果开启:

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

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

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

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

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

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

setAutoRelease(url,bool)

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

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



3.手动释放资源

loadRes/releaseRes

load/release

releaseAsset(资源对象的object)


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

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

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






相关内容

热门资讯

德国总理:美国正在被伊朗羞辱 德国之声4月27日报道,德国总理默茨在访问一所学校时表示,在当前的持续冲突中,伊朗领导层正试图羞辱美...
理响中国|“长”歌以行,风云激... 光阴如梭,东方潮阔。这里是中国的长三角,世界的长三角。无论过去、现在还是未来,这片土地都因时代而生,...
白宫:特朗普及其国安团队开会讨... 新华社华盛顿4月27日电 美国白宫新闻秘书莱维特27日在记者会上证实,总统特朗普及其国家安全团队当天...
人民日报刊文:日本放开杀伤性武... 日本放开杀伤性武器出口推高地缘冲突风险(国际论坛)常思纯《人民日报》(2026年04月28日 第 0...
医疗保障法草案二审:明确生育保... 满足多样化健康保障需求本报记者 彭 波4月27日,医疗保障法草案二审稿提请十四届全国人大常委会第二十...
天津一景区发生自转旋翼机事故1... 澎湃新闻记者 吕新文中国民用航空华北地区管理局4月22日公布《豪客通航“10•1”天津长芦汉盐旅游区...
卡塔尔埃米尔与美国总统特朗普通... 当地时间24日,卡塔尔埃米尔塔米姆与美国总统特朗普通电话,重点就中东地区局势以及伊朗与美国谈判问题交...
男子30年前被扣押2859克黄... 澎湃新闻记者 王鑫家住辽宁省大连市的潘永嘉近日向澎湃新闻反映称,三十年前,他在大连周水子机场被盖州市...
商务部:取消反制欧盟两家金融机... 中华人民共和国商务部令二〇二六年 第1号鉴于欧盟已取消对中国两家金融机构的制裁措施,现公布《关于取消...
过去24小时共有5艘船只通过霍... 总台记者当地时间24日获悉,过去24小时内,共有5艘船只通过霍尔木兹海峡,其中包括一艘伊朗油轮。(总...