cocos creator使用記錄32 動態載入

2021-08-21 20:06:01 字數 2983 閱讀 3513

1.前言

1.1.可動態載入的資源

(1)asset

cc.spriteframe,cc.animationclip,cc.prefab

asset 的載入是統一並且自動化的,相互依賴的 asset 能夠被自動預載入。

例如,當引擎在載入場景時,會先自動載入場景關聯到的資源,這些資源如果再關聯其它資

源,其它也會被先被載入,等載入全部完成後,場景載入才會結束。

因此只要你拿到了乙個 asset 物件,這個物件一定是已經載入結束的,可以直接通過物件上

的屬性訪問到資源的所有資料。

(2)raw asset

為了相容 cocos2d 的一些既有 api,我們把保留原始資源副檔名資源叫做 "raw asset"。

cc.texture2d,cc.audioclip,cc.particleasset

raw asset 在指令碼裡由乙個 url 字串來表示,當你要在引擎中使用 raw asset,只要把 

url 傳給引擎的 api,引擎內部會自動載入這個 url 對應的資源。

1.2.可動態載入的資源所在的資料夾

(1)所有需要通過指令碼動態載入的資源,都必須放置在 resources 資料夾或它的子資料夾下。

resources 需要在 assets 資料夾中手工建立,並且必須位於 assets 的根目錄。

(2)resources 資料夾裡面的資源,可以關聯依賴到資料夾外部的其它資源,同樣也可以被外部

場景或資源引用到。專案構建時,除了已在 構建發布 面板勾選的場景外,resources 資料夾裡面

的所有資源,連同它們關聯依賴的 resources 資料夾外部的資源,都會被匯出。

所以如果乙份資源不需要由指令碼直接動態載入,那麼不用放在 resources 資料夾裡。

1.3.動態載入asset

creator 提供了 cc.loader.loadres 這個 api 來專門載入那些位於 resources 目錄下的 

asset。loadres 一次只能載入單個 asset。呼叫時,你只要傳入相對 resources 

的路徑即可,並且路徑的結尾處不能包含副檔名。

// 載入 prefab

cc.loader.loadres("test assets/prefab", function (err, prefab)

var newnode = cc.instantiate(prefab);

cc.director.getscene().addchild(newnode);

});// 載入 animationclip

cc.loader.loadres("test assets/anim", function (err, clip) );

// 載入 spriteatlas(圖集),並且獲取其中的乙個 spriteframe

// 注意 atlas 資源檔案(plist)通常會和乙個同名的檔案(png)放在乙個目錄下, 所以

需要在第二個引數指定資源型別

cc.loader.loadres("test assets/sheep", cc.spriteatlas, function (err, atlas) );

1.4.動態載入的asset資源的釋放

loadres 載入進來的單個資源如果需要釋放,可以呼叫 cc.loader.releaseres,

releaseres 只能傳入乙個和 loadres 相同的路徑,不支援型別引數。

cc.loader.releaseres("test assets/anim");

此外,你也可以使用 cc.loader.releaseasset 來釋放乙個具體的 asset 例項。

cc.loader.releaseasset(spriteframe);

1.5.動態載入 raw asset

raw asset 可以直接使用 url 從遠端伺服器上載入,也可以從專案中動態載入。

對遠端載入而言,原先 cocos2d 的載入方式不變,使用 cc.loader.load 即可。

對專案裡的 raw asset,載入方式和 asset 一樣:

// 載入 texture,不需要字尾名

cc.loader.loadres("test assets/image", function (err, texture) );

raw asset 載入成功後,如果需要傳給一些 url 形式的 api,還是需要給出完整

路徑才行。你需要用 cc.url.raw 進行一次 url 的轉換:

// 原 url 會報錯!檔案找不到

var texture = cc.texturecache.addimage("resources/test assets/image.png");

// 用 cc.url.raw,此時需要宣告 resources 目錄和檔案字尾名

var realurl = cc.url.raw("resources/test assets/image.png");

var texture = cc.texturecache.addimage(realurl);

1.6.資源批量載入

cc.loader.loadresall 可以載入相同路徑下的多個資源:

// 載入 test assets 目錄下所有資源

cc.loader.loadresall("test assets", function (err, assets) );

// 載入 sheep.plist 圖集中的所有 spriteframe

cc.loader.loadresall("test assets/sheep", cc.spriteframe, function (err, assets) ) 

// 獲得的則是整個 spriteatlas 物件。

});2.實際使用中

loadlevel: function()

var level = cc.instantiate(prefab);

if(level && self.levelnode)

});},

cocos creator中使用UI框架 一

已上傳到github 滿意請點個星星 謝謝 簡單的ui框架 將其中的uiframe資料夾匯入到你的cocos creator中 uiframe的簡單介紹 以上七個類 其中baseuiform和uimanager是我們的重點內容,baseuiform 中定義了一些方法 狀態相關的 display 顯示...

使用cocos creator開發微信小遊戲 二

橫屏下,建議使用 fit width 豎屏下,建議使用 fit height,有些ui需要新增 widget對齊掛件,以顯示在相對於螢幕左,頂,右,底的位置 我的遊戲是橫屏的,配置如下 使用者資訊需要顯示在螢幕左上角 有些在場景工程中沒有指定而通過 中動態載入的資源,cocos creator不會匯...

cocos creator 十二 問題

1 socket為什麼不能使用 2 cocos類之攝像機使用問題 1 在使用socket為什麼不能使用 if cc.sys.isnative opts this sio window.io connect this.ip opts this sio.on connect function data ...