不幸的是,現在沒有適當的方式來獲取所有加載的類或類似的Flash API。因此,找到Component
的所有子類都已排除,檢查所有類的特定元標記也已排除。
前一段時間,我遇到了一個類/函數,它在加載時檢查SWF自己的字節碼以檢索所有包含的類。這是這種事情的唯一選擇。見this link和我的帖子的底部。
所以,你必須指定一個組件類的列表來選擇。
想到的一個過於複雜/不可行的選項是創建一個外部工具來搜索源文件夾,解析AS3代碼並確定所有子類Component
,最後在某個XML文件中生成一個列表。但是,這不是爲膽小一個任務...
你或許可以想到有一堆手動解決自己的,但一個方法是保持可訪問Array
或Vector.<Class>
的地方,例如:
public static const COMPONENT_LIST:Vector.<Class> = Vector.<Class>([
CollisionComponent,
VisualComponent,
StatsComponent,
...
...
]);
例如,保留String
名稱列表的一個優點是組件類將保證被編譯到SWF中。
如果這些類未在代碼中的其他任何地方顯式引用,則它們不會被編譯。這可能發生在一個簡單的組件上,每個框架只有update()
一次,並且只能由某個XML文件中的字符串指定。
澄清:你可以使用代碼在上面的鏈接來獲取所有加載的類的名稱列表,然後使用getDefinitionByName(className)
爲他們每個人,然後到describeType(classObj)
調用獲得的XML描述每種類型。然後,解析這個類型的超類型,你可以確定它是否擴展爲Component
。 我個人只會硬編碼一個列表,我覺得在啓動時檢查所有已加載的類都太麻煩了,但這取決於你。
這看起來像是Torious想法的自動化版本,非常完美。謝謝!我將不得不考慮如何讓FlashDevelop在編譯之前運行它。 – Bruce 2012-04-15 17:59:00
您可以在項目屬性 - >編譯 - >預生成命令行下找到它。它在我的示例項目中也是如此:) – 2012-04-15 18:16:53