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的一些基礎工具類的封裝

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章