哇,我在Stack Overflow上的第一篇文章。我“到达”了吗?

好吧,这是一个怪胎。我试图确定在运行时是否有某种编程方式可以对链接的SWC中的类进行自省。

为了提供更多的背景信息(也许有一种完全不同的方法可以做到这一点),我正在考虑字体嵌入的通用框架。当前,要嵌入字体(使用链接的SWC,而不是[embed]元标记),您需要使用Flash IDE将字体嵌入SWC,然后您需要在您的图书馆中将对库资源的类的引用硬编码代码(可能是由其他人使用其他IDE(例如FlashDevelop)创建的)。

现在,如果可以在运行时重新检查SWC并遍历它公开的类,则理论上可以以编程方式实例化/注册这些字体,而不必知道(在编译时)那些字体可能是什么。

因此,出现了一个问题:是否有人知道在运行时将SWC作为实体进行访问并反射Reflection 其公开的类?

顺便说一句,这种事情的基本原理是对设计和应用程序逻辑职责的明确分离的简单渴望。设计人员可以很容易地嵌入字体,作者和SWC,还可以编辑相应的外部CSS文件。指望它们更新对代码中类的硬引用,或者指望客户端在编译和发布作业后不改变主意,这要危险得多。

最佳答案

您可以将文件作为二进制文件加载(或使用舞台的LoaderInfo的bytes属性(如果它是主文件)),遍历“标签”以获取ABC数据,进行解析,然后查找所需的数据。不过这很麻烦。

诸如字体标签之类的东西。 DefineFont2(标记类型48)包含一个FontID和一个FontName,DefineFontName(标记类型88)包含一个FontID和FontName。也许这就是您需要的数据。如果是这样,那么即使是最大的文件浏览速度也可能非常快。

您可以在此处阅读.swf文件格式规范:http://www.adobe.com/devnet/swf.html

关于flash - 使用ActionScript 3.0 + Flash/Flex对链接的SWC进行运行时自省(introspection),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3868356/

10-08 21:42