FaityGUI筆記:Loader (五)
阿新 • • 發佈:2018-11-08
裝載器的用途是動態載入資源。點選主工具欄中的按鈕,生成一個裝載器。
-
GLoader
裝載器支援動態建立,動態建立裝載器一定要設定裝載器的大小,否則顯示不出來。例如:
GLoader aLoader = new GLoader();
aLoader.SetSize(100,100);
aLoader.url = "ui://包名/圖片名";
GLoader可以載入圖片、動畫和元件。如果是UI包裡的資源,那麼通過“ui://包名/圖片名”這種格式的地址就可以載入。但實際專案中,可能我們還需要載入和顯示一些不在UI包裡的,我們稱之為“外部”的圖片。預設的GLoader具有有限度的的載入外部資源的能力,它們是:
- AS3 使用flash.display.Loader載入的外部資源。
- Starling 使用flash.display.Loader載入的點陣圖資源。載入後轉化為Texture。
- Egret 使用egret.RES.getResAsync載入的外部點陣圖資源。
- Layabox 使用Laya.loader.load載入的外部資源。
- Unity 使用Resources.Load載入的外部貼圖資源。
//AS3,載入一個網路圖片 aLoader.url = “http://www.fairygui.com/logo.png”; //Egret,這裡demoRes是resources.json裡定義的一個資源 aLoader.url = “demoRes”; //Unity, 這裡載入的是路徑為Assets/Resources/demo/aimage的一個貼圖 aLoader.url = “demo/aimage”;
如果這些預設的外部載入機制不能滿足你的需求,例如,你希望從AssetBundle中獲取資源,或者你需要加入快取機制(這是有必要的,如果需要重複載入,建議做快取),或者需要控制素材的生命期(這也是必要的,因為GLoader不會銷燬外部載入的資源),那麼你需要擴充套件GLoader。
- 首先編寫你的Loader類,有兩個重點方法需要重寫:
class MyGLoader : GLoader { override protected function LoadExternal() { /* 開始外部載入,地址在url屬性 載入完成後呼叫OnExternalLoadSuccess 載入失敗呼叫OnExternalLoadFailed 注意:如果是外部載入,在載入結束後,呼叫OnExternalLoadSuccess或OnExternalLoadFailed前, 比較嚴謹的做法是先檢查url屬性是否已經和這個載入的內容不相符。 如果不相符,表示loader已經被修改了。 這種情況下應該放棄呼叫OnExternalLoadSuccess或OnExternalLoadFailed。 */ } override protected function FreeExternal(NTexture texture) { //釋放外部載入的資源 } }
2.註冊我們要使用的Loader類。註冊完成後,遊戲中所有裝載器都變成由MyGLoader例項化產生。
UIObjectFactory.SetLoaderExtension(typeof(MyGLoader));
在Unity平臺中,如果在某些特殊場合需要將Texture2D物件賦予給GLoader,例如一個視訊貼圖,那麼可以這樣做:
//必須注意GLoader不管理外部物件的生命週期,不會主動銷燬your_Texture2D
aLoader.texture = new NTexture(your_Texture2D);