溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

使用代碼來加載資源和釋放資源

發(fā)布時(shí)間:2020-08-27 00:31:21 來源:網(wǎng)絡(luò) 閱讀:27613 作者:超級(jí)極客 欄目:游戲開發(fā)

資源不只是可以通過編輯器綁定獲取.

其實(shí)他還可以使用代碼來動(dòng)態(tài)加載.


cc.loader


1.它有3個(gè)默認(rèn)的Pipeline(管道):

(1)assetLoader:主要用于加載資源,加載asset類型資源和釋放這些資源

(2)downloader:主要用于下載文件,文本,圖像,腳本,聲音,字體,自定義的download

(3)loader:第三個(gè)是默認(rèn)的Pipeline可以加載json,image,plist,fnt,uuid;

2.資源分為本地(assets目錄下)和遠(yuǎn)程資源

3.加載分為同步和異步, cc.Loader加載資源是 異步的




本地資源加載


1在代碼里加載資源必須要求資源放在assets/resources文件夾下

因?yàn)檫@是一種優(yōu)化策略:根據(jù)場景的依賴關(guān)系來打包我們的資源

就是說你這個(gè)資源用到了,他才打包,如果沒用到他就不打包.

這樣能夠節(jié)省資源,去掉無用的資源, 在代碼里使用隨時(shí)有可能去掉

他認(rèn)為不用的資源,但是無法判斷在代碼里加載的資源是哪些,

所以使用一種方案,所有resources目錄下的資源都會(huì)被打包進(jìn)去.

所以資源你不在代碼里加載的,不要放在resources目錄下.

使用代碼來加載資源和釋放資源

2加載的時(shí)候資源url不需要加assets/resources這個(gè)部分


3.cc.loader.loadRes(url,onComplete回調(diào)函數(shù))

4.loadResArray([],type類型,progressCallback,completeCallback);

5.loadResDir(url[type][progressCallback][completeCallback])

他是加載一個(gè)路勁下的資源

6getRes(url,[type]); 獲取資源id



加載播放一個(gè)聲音mp3 第二個(gè)參數(shù)是加載完成的回調(diào)函數(shù)

加載完后在回調(diào)函數(shù)里進(jìn)行播放即可.


    local_load: function(){
    //本地加載聲音
    //第一個(gè)參數(shù)是url 不要后綴名
    cc.loader.loadRes("bgFight",function(err,prefab){
    if(err){
    //這里就是有錯(cuò)誤發(fā)生
    console.log(err);
    return;
    }
    //這里就是沒出錯(cuò) 并且輸出他的信息
    console.log(prefab);
    //因?yàn)樗且粋€(gè)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){
    //加載資源的回調(diào)函數(shù)
    if(err){
    //這里就是有錯(cuò)誤發(fā)生
    console.log(err);
    return;
    }
    //否則這里就是spriteFrame對象
    console.log(pre);
    this.spr.spriteFrame = pre;
    }.bind(this));
    }

獲取資源getRes 例如一個(gè)游戲,在進(jìn)入下一個(gè)場景之前,有一個(gè)場景

加載資源,那么到了新的場景之后,我們就找到這個(gè)加載好的資源







遠(yuǎn)程資源加載


1 cc.loader.load(url,結(jié)束回調(diào)函數(shù));

使用互聯(lián)網(wǎng)上 或者遠(yuǎn)程部署的圖片

2 cc.loader.load({url"",type""},結(jié)束回調(diào)函數(shù));

3 遠(yuǎn)程加載任意類型文件


去百度一張圖片  或者自己搭建一個(gè)web服務(wù)器

使用代碼來加載資源和釋放資源



    //遠(yuǎn)程加載
    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;
    }
    //因?yàn)檫@個(gè)返回的是 cc.Texture2D的對象
    //所以需要調(diào)用這個(gè)設(shè)置一下
    this.spr.spriteFrame.setTexture(ret);
    }.bind(this));


使用代碼來加載資源和釋放資源  成功加載了但是他變得很小,如果想用原始大小呢


只需要設(shè)置精靈大小為這個(gè) texture2D的大小即可 使用他默認(rèn)大小

this.spr.node.setContentSize(ret.getContentSize())


使用代碼來加載資源和釋放資源



從服務(wù)器加載一個(gè)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數(shù)據(jù)

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.每個(gè)場景有個(gè)自動(dòng)釋放資源,勾選上這個(gè)場景的資源會(huì)自動(dòng)釋放,

不勾選上這個(gè)場景的資源不釋放.

還有個(gè)延時(shí)加載資源:他的作用是如果關(guān)閉,那這個(gè)場景間接或直接遞歸

依賴的所有資源都將被加載,全部加載后才會(huì)觸發(fā)場景切換.

如果開啟:

這個(gè)場景直接或間接依賴的所有貼圖,粒子和聲音都將被延遲到場景

切換后才加載,使場景加載速度極大提升,同時(shí),玩家進(jìn)入場景后可能會(huì)

看到一些資源陸續(xù)顯示出來,并且激活,這種方式適合網(wǎng)頁游戲.

注意,spine和TieldMap依賴的資源永遠(yuǎn)都不會(huì)被延遲加載.

使用代碼來加載資源和釋放資源

2.代碼加載的資源,默認(rèn)是不會(huì)收這個(gè)選項(xiàng)的影響的,除非設(shè)置

setAutoRelease(url,bool)

使用這個(gè) API 可以在單個(gè)資源上改變這個(gè)默認(rèn)行為,

強(qiáng)制在切換場景時(shí)保留或者釋放指定資源。



3.手動(dòng)釋放資源

loadRes/releaseRes

load/release

releaseAsset(資源對象的object)


我加載一個(gè)圖片,異步加載好后 立刻釋放, 然后5秒之后

在顯示圖片,他就顯示不出來了,因?yàn)樗会尫诺袅?/span>

    local_load: function(){
    //和聲音不同 這里要寫加載的類型
    cc.loader.loadRes("texture/powered",cc.SpriteFrame,
    function(err,pre){
    //加載資源的回調(diào)函數(shù)
    if(err){
    //這里就是有錯(cuò)誤發(fā)生
    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);






向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI