2010-08-14 43 views
0

我正在加載包含未經實例化的影片剪輯符號的外部SWF。我可以加載SWF,沒問題。如果我打電話:AS3:動態訪問外部庫符號

loader.contentLoaderInfo.applicationDomain.getDefinition("TestClip") as Class 

我得到名爲「TestClip」的庫符號的類,然後我可以實例化它。 Jawesome

我遇到的問題是基本上我想訪問所有的庫符號而不需要明確地知道它們的名字。我希望能使用:

describeType(loader.contentLoaderInfo.applicationDomain); 

...去圖書館符號反射訪問,但返回的XML似乎並不包括他們的任何引用。也許我是在錯誤的對象上調用它?我也不希望顯式創建編碼實例以獲得訪問權限。這是Flash藝術家的工具,避免代碼,甚至是簡單的代碼都很重要。

必須有一些途徑才能訪問符號。任何建議如何做到這一點,將不勝感激!

相關:

as3 - getting library symbols from an Assets class

AS3 - getting symbols from an assets library WITHOUT Flex

Flash AS3 : addChild() does not display imported movieclip

回答

1

http://www.bytearray.org/?p=175

http://etcs.ru/pre/getDefinitionNamesSource/

這兩個類似乎都完成了我期望通過分析SWF的原始ByteArray數據來完成的工作。我現在將這些作爲最好的答案提交,但作爲完成此操作的原生方式仍然是需要的。如果有人能夠在這裏展示這樣的方法,那將會得到答案。

第二個類getDefinitionNamesSource的用法很簡單,因爲它實現起來有點簡單。

import ru.etcs.utils.getDefinitionNames; 

當然,導入類。

var classes : Array = getDefinitionNames(displayObject.loaderInfo.bytes); 

然後,您可以撥打以上,其中displayObject的是任何實例DisplayObject,通過它要麼loaderInfoloaderInfo.bytes(班會得到因此loaderInfo字節,如果這就是你通過它)。它返回一個類名的數組。關於這個類的好處是它返回了未鏈接的類!這使它成爲這個目的的理想選擇!然後,您可以在加載的SWF上使用getDefinition()來獲取該類,以便您可以實例化它!在下面的例子中。加載符號爲MovieClip的SWF。在Event.COMPLETE處理程序中,以下代碼將實例化其中一個符號作爲myInstance,此時,您可以執行任何您想要的操作。

var MyAsset : Class = loader.contentLoaderInfo.applicationDomain.getDefinition(classes[0]) as Class; 
var myInstance : MovieClip = new MyAsset();