cocos creator基礎-(十三)cc.Loader使用

1: 掌握cc.loader加載本地資源;
2: 掌握cc.loader加載遠程資源;
3: 掌握資源釋放的機制與autorelease;
4: 掌握手動釋放資源;
 
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 ]) 加載一個路徑下的資源;
    cc.loader.loadResDir( // 加載resources目錄下的全部資源
        "/", function(){});
6: getRes(url, [type]); 獲取資源id;
 
遠程資源加載
 
1: cc.loader.load(url, 結束回掉函數);
2: cc.loader.load({url: 「」, type: 「」}, 結束回掉函數);
3: 遠程加載任意類型文件;
 
資源卸載
1:每一個場景有個自動釋放資源
  勾選上這個場景的資源會自動釋放,不勾選上這個場景的資源不釋放
2: 代碼加載的資源,默認是不會受場景這個選項的影響的,除非設置
  cc.loader.setAutoRelease(url, brealse),在場景自動釋放的時候,代碼資源也會釋放
3: 手動釋放資源
  loadRes/ releaseRes
  load / release
  releaseAsset (資源對象的object);
 
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) {

    // },
});
相關文章
相關標籤/搜索