您好,登錄后才能下訂單哦!
資源不只是可以通過編輯器綁定獲取.
其實他還可以使用代碼來動態加載.
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);
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。