我有一个工厂,其中 Action Script 遵循 xml 并从中构建 DisplayObject 层次结构。这意味着脚本事先并不知道它将在 xml 中遇到哪些元素,因此也不知道它将需要哪些用户定义的工厂类。
我知道可以做这样的事情:
var rect:*, className:String = "flash.geom.Rectangle";
if (ApplicationDomain.currentDomain.hasDefinition(className)) {
rect = new(getDefinitionByName(className));
}
And 长方形实例将被实例化。但一旦我更换flash.geom.矩形与用户定义的东西,比如我的工厂块它停止工作,如果我注释掉条件,我会变得简单:“变量块未定义” error.
明显的解决方法是创建一个实例我的工厂块(以及所有其他组件),在激活工厂之前,但这有点破坏了动态组件工厂的全部意义。
当然,我有:导入我的工厂。*;脚本顶部的声明。
有没有更聪明的解决方案?
正如其他人指出的那样,问题很可能是类未包含在编译的 swf 中。正如丹尼尔指出的那样,导入是不够的,您需要对该类的引用。但是,您不需要声明变量,正如 Cay 所说,您只需执行以下操作:
MyClass;
不过,如果您使用 mxmlc 进行编译,则可以使用 -includes 选项来指定您想要强制包含在已编译的 swf 中的一个或多个类。这样做的好处是它不需要您在代码中引用。它看起来像这样:
-包括 com.example.MyClass com.example.MyOtherClass
如果您想要包含一个非常大的类包,但不想写出每个类的类名,您可以使用 compc 将包编译为 swc,并使用 -include-libraries mxmlc 的选项包括整个包。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)