一切都很好,我可以创建我的MovieClip的实例,只需通过这样调用他们的类.
//example 1 var newMc:BaseClass = new GraphicAsset();
现在如果我想要执行以下操作,Flash会抛出错误,GraphicsAssetClass为null!
//example 2 var GraphicsAssetClass:Class = getDeFinitionByName("GraphicAsset") as Class;
我可以让上述线路工作的唯一方法就是这样做
//example 3 var newMc:GraphicAsset; var GraphicsAssetClass:Class = getDeFinitionByName("GraphicAsset") as Class; //then I'm able to do this var newMc:BaseClass = new GraphicsAssetClass();
你能想到一个解决方案,我可以通过调用getDeFinitionByName()简单地获取类
就像我在例2中所做的那样,无需借助示例3解决方案.
解决方法
正常的方法就像你在“例子3”中所示.但重要的是要注意两条线不必在同一个地方.只要
var newMc:GraphicAsset;
在SWF的某个地方,从主要的执行路径引用,然后GraphicAsset的类定义将包含在最终的swf中.然后你可以打电话给…
var GraphicsAssetClass:Class = getDeFinitionByName("GraphicAsset") as Class;
从其他地方完全,它会像你期望的那样工作.
甚至可能(并且很常见)在seaprate SWF中找到两条线.在这种情况下,一个swf会在运行时加载另一个swf.通常,加载器swf将是使用getDeFinitionByName(“SomeClass”)的加载器,并且加载的swf将是定义类SomeClass的swf,并使用var a:SomeClass;来确保将类构建到swf中.
出于这个原因,您经常会在“库swf”中找到一个名为“MyLibraryManifest”的类,然后从该swf的主影片剪辑中引用.然后“manifest”类看起来像这样:
class MyLibraryManifest { private var a:GraphicAsset; private var b:SomeClass; private var c:SomeOtherClass; //... and so on... }
[edit]您可以对mxmlc编译器使用-includes或-include-libraries选项,强制链接器包含一个或多个单独的类(或整个swc),而不应用上面描述的“修剪优化”.
see adobe’s site解释mxmlc命令行选项.
选项也可以是specified in a config file,允许您控制Flex和/或Flash IDE在幕后调用编译器的方式.
祝好运!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。