美文网首页
cocos creator——cc.loader使用

cocos creator——cc.loader使用

作者: 程序猿TODO | 来源:发表于2021-03-03 14:15 被阅读0次

    cc.loader

    存在3个默认Pipeline:

    管道名 功能
    assetLoader 用于加载资源,默认为第一个管道,用于识别资源类型,并确定如何下载它,还有释放资源
    downloader 用于下载资源,默认为第二个管道, 它用于下载具有多个处理程序的文件:纯文本,图像,脚本,音频,字体,uuid。 可以使用addDownloadHandlers添加自己的下载功能(自定义下载)
    loader 默认情况下为第三个管道。 它用于加载JSON,图像,plist,fnt,uuid类资源。 您可以使用addLoadHandlers添加您自己的下载功能

    资源分为本地资源(assets目录下)与远程资源两个种类
    加载都是一个异步的过程
    在cocos creator中使用代码加载资源必须要求资源在assets/resources/ 文件夹下

    loader.loadRes()使用

    loadRes() 有4个参数

    参数列表 对应功能
    url 资源文件的url地址
    type 如果写上这个参数就会只加载该类型的资源
    progressCallback(completedCount,totalCount,item) 当进程更改时调用的回调函数
    completeCallback(err,ret) 当资源加载时调用的回调函数

    代码实现本地加载资源

     start () {
            this.local_load();//调用加载函数
        },
    
        local_load:function(){
            cc.loader.loadRes("Super",function(err,ret){
                if(err){
                    cc.log(err);
                    return;
                }
                else{
                    cc.log(ret);
                    this.Audio.clip = ret;
                    this.Audio.play();
                    cc.log("正在播放?"+this.Audio.isPlaying); //检测是否在播放
                }
            }.bind(this));
             cc.loader.loadRes("block",cc.SpriteFrame,function(err,ret){
                if(err){
                    cc.log(err);
                    return;
                }
                cc.log("ret = "+ret);
                this.SpriteRes.spriteFrame = ret;
                //等效于this.SpriteRes.spriteFrame = cc.load.getRes("block",cc.SpriteFrame);
                //不过getRes也可以在其他场景继续使用
            }.bind(this));
        },
    
    

    运行结果


    打印出true结果就代表声音正在播放了,并且图片加载进去了

    远程加载

    如果需要从远程的服务器中获取资源,此时需要cc.load.load(url,callback) 与本地加载资源API类似
    只不过有一点不同,我们可以传入一个表{url:xxxx,type:xxx(如:MP3,png)},creator就可以识别出文件类型

    cc.loader.load({url: 'http://example.com/getImageREST?file=a.png', type: 'png'}, function (err, tex) {
        cc.log('Should load a texture from RESTful API by specify the type: ' + (tex instanceof cc.Texture2D));
    });
    
    

    资源的释放

    场景中的属性检查器上有一个自动释放资源,但是它无法清理代码加载的资源
    如果需要自动清理,可以使用setAutoRelease(url,autoRelease),强制在切换场景时保留或者释放指定资源

    手动释放资源

    加载资源类型 对应释放
    loadRes() 本地加载资源 使用releaseRes(url,type)释放资源
    load() 远程加载 使用release(asset) 释放资源
    releaseAsset(asset) 通过资源对象自身来释放资源。
    cc.Class({
        extends: cc.Component,
    
        properties: {
            // foo: {
            //    default: null,      // The default value will be used only when the component attaching
            //                           to a node for the first time
            //    url: cc.Texture2D,  // optional, default is typeof default
            //    serializable: true, // optional, default is true
            //    visible: true,      // optional, default is true
            //    displayName: 'Foo', // optional
            //    readonly: false,    // optional, default is false
            // },
            // ...
            audio: {
                type: cc.AudioSource,
                default: null,
            },
    
            sprite: {
                type: cc.Sprite,
                default: null,
            },
        },
    
        // use this for initialization
        onLoad: function () {
    
        },
    
        start: function() {
            // this.local_load();
            this.remote_load();
        },
    
        remote_load: function() {
            // 加载远程的图片 release 卸载资源
            cc.loader.load("http://127.0.0.1:6080/splash.png", function(err, ret) {
                if(err) {
                    console.log(err);
                    return;
                }
    
                // ret is cc.Texture2D这样对象
                this.sprite.spriteFrame.setTexture(ret);
                this.sprite.node.setContentSize(ret.getContentSize()); // 使用这个图片的大小
                // end 
            }.bind(this));
            // end
    
            // 从服务器加载mp3来进行播放, type,就是url不带类型,我们就使用url + type的模式来制定类型
            cc.loader.load({url: "http://127.0.0.1:6080/bg.mp3", type: "mp3"}, function(err, ret) {
                if (err) {
                    console.log(err);
                    return;
                }
                this.audio.clip = ret;
                this.audio.play();
            }.bind(this));
            // end 
    
            // 从服务器加载json文件
            cc.loader.load({url: "http://127.0.0.1:6080/project.json", type: "json"}, function(err, ret) {
                if (err) {
                    console.log(err);
                    return;
                }
                
                console.log(ret);
            }.bind(this));
            // end 
    
            // 
            cc.loader.load({url: "http://127.0.0.1:6080/test.mydata", type: "mydata"}, function(err, ret) {
                if (err) {
                    console.log(err);
                    return;
                }
                
                console.log(ret);
            }.bind(this));
            // end 
        },
    
        local_load: function() {
            // 本地加载声音
            // 注意:这里不需要后缀名, assets/resources/这个也不需要  releaseRes卸载资源
            cc.loader.loadRes("bg", function(err, ret){
                if(err) {
                    console.log(err);
                    return;
                }
                console.log(ret); // audio clip
                this.audio.clip = ret;
                this.audio.play();
            }.bind(this));
            // end 
    
            // 本地加载图片
            cc.loader.loadRes("img/disk", cc.SpriteFrame, function(err, ret) {
                if (err) {
                    console.log(err);
                    return;
                }
    
                // spriteFrame对象
                // 例如我们的游戏,在进入下一个场景之前,有一个资源加载场景,那么到了新的场景后,我们就能够找到这个加载好的资源
                // cc.loader.getRes();
                this.sprite.spriteFrame = cc.loader.getRes("img/disk", cc.SpriteFrame);
                // end 
            }.bind(this));
            // end 
        },
        // called every frame, uncomment this function to activate update callback
        // update: function (dt) {
    
        // },
    });
    

    相关文章

      网友评论

          本文标题:cocos creator——cc.loader使用

          本文链接:https://www.haomeiwen.com/subject/dfawtltx.html