cocos creator——cc.loader使用

cc.loader

存在3個默認Pipeline:

管道名 功能
assetLoader 用于加載資源,默認為第一個管道,用于識別資源類型,并確定如何下載它,還有釋放資源
downloader 用于下載資源,默認為第二個管道, 它用于下載具有多個處理程序的文件:純文本,圖像,腳本,音頻,字體,uuid。 可以使用addDownloadHandlers添加自己的下載功能(自定義下載)
loader 默認情況下為第三個管道。 它用于加載JSON,圖像,plist,fnt,uuid類資源。 您可以使用addLoadHandlers添加您自己的下載功能

資源分為本地資源(assets目錄下)與遠程資源兩個種類
加載都是一個異步的過程
在cocos creator中使用代碼加載資源必須要求資源在assets/resources/ 文件夾下

loader.loadRes()使用

loadRes() 有4個參數(shù)

參數(shù)列表 對應(yīng)功能
url 資源文件的url地址
type 如果寫上這個參數(shù)就會只加載該類型的資源
progressCallback(completedCount,totalCount,item) 當進程更改時調(diào)用的回調(diào)函數(shù)
completeCallback(err,ret) 當資源加載時調(diào)用的回調(diào)函數(shù)

代碼實現(xiàn)本地加載資源

 start () {
        this.local_load();//調(diào)用加載函數(shù)
    },

    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也可以在其他場景繼續(xù)使用
        }.bind(this));
    },

運行結(jié)果


打印出true結(jié)果就代表聲音正在播放了,并且圖片加載進去了

遠程加載

如果需要從遠程的服務(wù)器中獲取資源,此時需要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),強制在切換場景時保留或者釋放指定資源

手動釋放資源

加載資源類型 對應(yīng)釋放
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

        // 從服務(wù)器加載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 

        // 從服務(wù)器加載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) {

    // },
});
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容