欢迎光临散文网 会员登陆 & 注册

cc_loader代码加载和释放资源

2022-01-10 21:29 作者:unity小能手  | 我要投稿

在Cocos Creator游戏开发中,经常需要动态加载资源,所以了解并熟悉cc.loader的使用非常必要。

一、cc.loader简介

1:有三个默认的Pipeline:

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

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

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

2: 资源分为本地(assets目录下)与远程资源;

3:  加载异步的;

二、本地资源加载

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

   (1)根据场景的依赖关系来打包我们的资源;  去掉不用的资源

   (2)无法判断在代码里面加载的资源,是哪些?-->所有的resources目录下的资源,都会被打包进去,你在代码里面就能加载到它了。

   如果资源不在代码里面加载,一般不要放到resources目录下 ,如果放到了,这个资源不关你有没有用,都会被打包进去;

2: 资源的url不需要加assets/resources这个部分,路劲不需要加这个前缀;

3:cc.loader.loadRes(url, onComplete回掉函数);

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

5: loadResDir (url [type ] [progressCallback ] [completeCallback ]) 加载一个路径下的资源;

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



const {ccclass, property} = cc._decorator;

@ccclass

export default class GameMgr extends cc.Component {


   @property(cc.AudioSource)

bgAudio : cc.AudioSource = null;


   @property({type:cc.Sprite, tooltip:"精灵组件"})

bgSprite : cc.Sprite = null;


   onLoad () {

this.localLoad();

   }

   localLoad(){

       cc.loader.loadRes("bg", function(err, ret){

           if(err){

               cc.error(err.messager || err);

               return;

           }

           // 动态加载的音效资源

this.bgAudio.clip = ret;

this.bgAudio.play();

       }.bind(this));


       // 动态加载图片

       cc.loader.loadRes("imgs/disk", cc.SpriteFrame, function(err, ret){

           if(err){

               cc.error(err.messager || err);

               return;

           }

console.log(ret)

console.log(this.bgSprite);

this.bgSprite.spriteFrame = ret;

       }.bind(this));

   }

}

运行结果如下:


三、远程资源加载

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

2: cc.loader.load({url: “”, type: “”}, 结束回掉函数);

3: 远程加载任意类型文件;

我们采用NodeJS环境测试。



注意:NodeJS环境中需要设置跨域访问,如下:

//设置跨域访问

app.all('*', function(req, res, next) {

   res.header("Access-Control-Allow-Origin", "*");

   res.header("Access-Control-Allow-Headers", "X-Requested-With");

   res.header("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS");

   res.header("X-Powered-By", ' 3.2.1');

   res.header("Content-Type", "application/json;charset=utf-8");

   next();

});

GameMgr.ts代码修改如下:

   onLoad () {

       //this.localLoad();

this.remoteLoad();

   }


   remoteLoad(){

       cc.loader.load({url:"http://127.0.0.1:6080/res/bg.mp3", type:"mp3"},function(err, ret){

           if(err){

               cc.error(err.message || err);

               return;

           }

           // 动态加载的音效资源

this.bgAudio.clip = ret;

this.bgAudio.play();

       }.bind(this));


       cc.loader.load("http://127.0.0.1:6080/res/disk.png",function(err, ret){

           if(err){

               cc.error(err.message || err);

               return;

           }

           //console.log(ret);

           // 加载时候会自动识别资源类型,cc.Texture2D

this.bgSprite.spriteFrame.setTexture(ret);

           // 需要修改图片精灵所在节点的大小

this.bgSprite.node.setContentSize(ret.width, ret.height);

       }.bind(this));

   }

四、资源卸载

1:每个场景有个自动释放资源

   勾选上这个场景的资源会自动释放,不勾选上这个场景的资源不释放

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

    cc.loader.setAutoRelease(url, brealse)

3: 手动释放资源

   loadRes/ releaseRes  

   load / release

   releaseAsset (资源对象的object);

今天的分享就到这里,更多教学视频请点击:

https://bycwedu.vipwan.cn/promotion_channels/630597732


cc_loader代码加载和释放资源的评论 (共 条)

分享到微博请遵守国家法律