1. 程式人生 > >cocos creator主程入門教程(三)—— 資源管理

cocos creator主程入門教程(三)—— 資源管理

五邑隱俠,本名關健昌,10年遊戲生涯,現隱居五邑。本系列文章以TypeScript為介紹語言。

 

在初識篇,我介紹過怎樣載入prefabcocos提供了一系列的載入介面,包括cc.loader.load,cc.loader.loadRes,cc.loader.loadArray,cc.loader.loadDir。這些介面除了載入資源外,也負責資源管理。所以,在介面被銷燬時,如果在cc.loader裡還有該資源,資源是不會釋放的。對於資源的管理,有兩種方式,一種是資源載入後,cc.loader不管理資源,通過介面的引用計數來確定是否銷燬資源。一種是cc.loader管理資源,介面使用資源,在模組退出時,通過

cc.loader銷燬資源。我偏向於第二種方式,這樣資源可以得到即時釋放。

下面說說這幾個介面的使用場景:

1.cc.loader.load用於載入第三方遠端資源,在遊戲中一般用於載入第三方平臺的頭像資源,如果該資源的連結沒有檔案字尾名,需要加引數{type:"png"}。

2.cc.loader.loadRes用於載入assets/resources目錄下單個資源

3.cc.loader.loadArray用於批量載入assets/resources目錄下資源,比較適合於進度條載入介面,通過進度變化更新進度條。

4.cc.loader.loadDir用於載入assets/resources目錄下單個目錄的資源,一般我會把單個

spine骨骼動畫放在一個目錄,把一個介面的資源放在一個目錄。這樣就可以通過這個介面載入單個spine動畫或者一個介面的資源。

在初識篇提到,我們建立assets/resources目錄用於存放資源,目的是可以通過上述除了cc.loader.load外的介面載入資源,簡化使用。

資源載入管理模組,可以劃分為ResLoaderViewLoader。其中ResLoader負責基礎資源載入,另外提供超時、重試機制。ViewLoader負責對載入的prefab、重用介面的node進行快取管理。這類工具性的類,我都習慣做成單例,一來遊戲裡只需要一個物件,另外單例有利於這些物件可以全域性訪問。

ResLoader,封裝

cc.loader上述幾個介面,以及對應的釋放介面。

超時實現:設定回撥控制變數,settimeout回撥中設定變數,並呼叫超時回撥,在成功失敗處理中判斷變數是否觸發成功失敗的回撥。由於cc.loader本身有做資源管理,所以下次呼叫載入時如果已經通過cc.loader正在載入和成功載入的資源不會重複載入。

重試實現:通過變數記錄載入次數,在失敗和超時處理中判斷是否達到重試次數,未達到則重新載入。

ViewLoader,負責prefab和重用介面node的快取,所以每個prefab都設定一個對應的tag,載入的prefab存放在Dictionary<stringcc.Prefab>型別的prefabDict屬性中(Dictionary可以通過兩個陣列存放key-value封裝出來),重用介面的node存放在Dictionary<stringcc.Node>型別的nodeDict屬性中。通過ResLoader載入cc.Prefabcc.instantiate例項出node節點(參看初識篇)

資源載入管理先聊到這裡,下一篇先聊聊像Dictionary的一些基礎工具類的封裝