不幸的是,现在没有适当的方式来获取所有加载的类或类似的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