不幸的是,目前还没有适当的方法在 Flash API 中获取所有加载的类或类似的东西。因此,查找所有子类Component
已经过时,检查所有类以查找特定元标记也已过时。
不久前,我确实遇到了一个类/函数,它在加载时检查 SWF 自己的字节码以检索所有包含的类。这是这种事情的唯一选择。请参阅此链接和我的帖子底部。
因此,您必须指定要从中选择的组件类列表。
想到的一个过于复杂/不可行的选择是创建一个外部工具来搜索您的源文件夹、解析 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 描述。然后,将其解析为类型的超类型,您可以确定它是否为 extends Component
。我个人只会硬编码一个列表。在启动时检查所有加载的类对我来说感觉太乱了,但这取决于你。