搜尋部落格文章

2013年4月23日 星期二

外部載入執行階段共享資源swf相關設定

以前製作專案剛開始,都會把圖像字體直接放入主要檔案的元件庫中
這樣會造成檔案體積越來越大
有一種做法就是將這些圖像元件拉到外部swf中,在程式初始化預先載入
隨後利用ApplicationDomain.currentDomain.getDefinition(元件類別名稱)存取
請讓自己養成習慣,以往存取元件的方式,請用上列方式取代

  • 程式中直接建構實體。
  • new AClass();
  • 盡量減少使用Flash IDE創建的元件,盡可能的使用類別。

載入外部swf的注意事項
主要swf與被載入的swf所屬同網域
請替Loader增加
LoaderContext.applicationDomain=ApplicationDomain.currentDomain;
其他用法:對於要使用何種 ApplicationDomain 屬性,您有下列四種選擇:

  • 載入器之 ApplicationDomain 的子系。預設值。 您可以使用 new ApplicationDomain(ApplicationDomain.currentDomain) 語法明確表示這項選擇。 這樣會允許載入的 SWF 檔直接使用父輩的類別,例如藉由撰寫 new MyClassDefinedInParent()。 然而,父輩卻無法使用此語法。如果父輩希望使用子系的類別,便必須呼叫 ApplicationDomain.getDefinition() 以擷取這些類別。 這項選擇的優點在於,如果子系定義之類別的名稱,與父輩已定義的類別相同,並不會造成錯誤,子系將會直接繼承父輩對於該類別的定義,而且除非子系或父輩呼叫 ApplicationDomain.getDefinition() 方法以擷取定義,否則都不會使用到子系的衝突定義。
  • 載入器自己的 ApplicationDomain。您可以在使用 ApplicationDomain.currentDomain 時,使用此應用程式網域。 當載入完成時,父輩和子系都可直接使用彼此的類別。 如果子系嘗試定義的類別與父輩已經定義的類別同名,就使用父類別,忽略子類別。
  • 系統 ApplicationDomain 的子系。您可以在使用 new ApplicationDomain(null) 時,使用此應用程式網域。 這樣會完全分隔載入器和載入對象,允許兩者以相同的名稱定義不同的類別,而不會造成衝突或遮蓋。 兩端都能看到另一端之類別的唯一方式,便是呼叫ApplicationDomain.getDefinition() 方法。
  • 某些其它 ApplicationDomain 的子系。有時候,您可能會擁有更複雜的 ApplicationDomain 階層。 您可以從自己的 SecurityDomain,將 SWF 檔載入任何 ApplicationDomain。 例如,new ApplicationDomain(ApplicationDomain.currentDomain.parentDomain.parentDomain) 會將 SWF 檔載入至目前網域之祖父輩 (父輩的父輩) 的新子系中。
當載入完成時,任一端 (載入或被載入者) 都可能因為呼叫 ApplicationDomain.getDefinition() 的目的,而需要尋找自己的 ApplicationDomain,或是另一端的 ApplicationDomain。 任一端都可以使用 ApplicationDomain.currentDomain 來擷取或參照自己的應用程式網域。 載入的 SWF 檔可以透過 Loader.contentLoaderInfo.applicationDomain,擷取載入之 SWF 檔的 ApplicationDomain 參照。 如果遭載入的 SWF 檔知道本身載入的方式,便會知道如何找到執行載入之 SWF 檔的 ApplicationDomain 物件。 例如,如果子系是以預設方式載入,即可使用 ApplicationDomain.currentDomain.parentDomain,找到載入之 SWF 檔的應用程式網域。

主要swf與被載入的swf非屬同網域
請替Loader增加
LoaderContext.securityDomain = SecurityDomain.currentDomain;



沒有留言:

張貼留言