Pat*_*ckS 8 flash swc actionscript-3
我在fla中有一堆图形资源,MovieClip链接到某些类.我将fla导出为swc,我将其添加到我的库中,并选择"Merged into Code".
一切都很好,我可以创建我的MovieClip的实例,只需通过这样调用他们的类.
//example 1
var newMc:BaseClass = new GraphicAsset();
Run Code Online (Sandbox Code Playgroud)
现在,如果我想要执行以下操作,Flash会抛出错误,GraphicsAssetClass为null!
//example 2
var GraphicsAssetClass:Class = getDefinitionByName("GraphicAsset") as Class;
Run Code Online (Sandbox Code Playgroud)
我可以让上述线路工作的唯一方法就是这样做
//example 3
var newMc:GraphicAsset;
var GraphicsAssetClass:Class = getDefinitionByName("GraphicAsset") as Class;
//then I'm able to do this
var newMc:BaseClass = new GraphicsAssetClass();
Run Code Online (Sandbox Code Playgroud)
您能想到一个解决方案吗?我可以通过调用getDefinitionByName()来简单地获取类,就像我在示例2中那样,而不必求助于示例3解决方案.
Lee*_*Lee 11
问题是编译器将排除代码中某处未直接引用的任何类.这是编译器通过设计应用的优化.
正常的方法就像你在"例子3"中所展示的那样.但重要的是要注意两条线不必在同一个地方.只要
var newMc:GraphicAsset;
Run Code Online (Sandbox Code Playgroud)
在SWF中的某个位置是从主要执行路径引用的,然后类定义GraphicAsset将包含在最终的swf中.然后你可以打电话给...
var GraphicsAssetClass:Class = getDefinitionByName("GraphicAsset") as Class;
Run Code Online (Sandbox Code Playgroud)
从其他地方完全,它会像你期望的那样工作.
甚至可能(并且很常见)在seaprate SWF中找到两条线.在这种情况下,一个swf会在运行时加载另一个swf.通常,加载器 swf将是使用的getDefinitionByName("SomeClass),并且加载的 swf将是定义class SomeClass和使用var a:SomeClass;以确保类内置到swf中的swf.
出于这个原因,您经常会在"库swf"中找到一个名为"MyLibraryManifest"的类,然后从该swf的主影片剪辑中引用.然后"manifest"类看起来像这样:
class MyLibraryManifest {
private var a:GraphicAsset;
private var b:SomeClass;
private var c:SomeOtherClass;
//... and so on...
}
Run Code Online (Sandbox Code Playgroud)
[edit]您可以使用编译器的-includes或-include-libraries选项mxmlc,强制链接器包含一个或多个单独的类(或整个swc),而不应用上面描述的"修剪优化".
有关mxmlc命令行选项的说明,请参阅adobe的站点.
这些选项也可以在配置文件中指定,允许您控制Flex和/或Flash IDE在幕后调用编译器的方式.
祝好运!
| 归档时间: |
|
| 查看次数: |
4524 次 |
| 最近记录: |