1. 程式人生 > >FaityGUI筆記:Loader (五)

FaityGUI筆記:Loader (五)

裝載器的用途是動態載入資源。點選主工具欄中的按鈕,生成一個裝載器。

  • 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。

  1. 首先編寫你的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);