flash - 使用 SWC - getDefinitionByName 问题

标签 flash actionscript-3 swc

我在 fla 中有一堆图形 Assets ,MovieClips 链接到一些类。我将 fla 导出为 swc ,并使用“合并到代码”选项将其添加到我的库中。

一切都很好,我可以创建我的 MovieClips 的实例,只需像这样调用它们的类。

     //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;

完全来自其他地方,它会按您的预期工作。

甚至有可能(而且很常见)在分离的 SWF 中找到这两行。在这种情况下,一个 swf 会在运行时加载另一个 swf。通常,加载器 swf 将是使用 getDefinitionByName("SomeClass) 的那个。 ,并且加载的 swf 将是定义 class SomeClass 的那个。 ,并使用 var a:SomeClass; , 以确保将类内置到 swf 中。

出于这个原因,您经常会发现一个名为“MyLibraryManifest”的类在“库 swf”中定义,然后从该 swf 的主影片剪辑中引用。然后“ list ”类将看起来像这样:
class MyLibraryManifest {

   private var a:GraphicAsset;
   private var b:SomeClass;
   private var c:SomeOtherClass;

   //... and so on...

}

[编辑] 您可以使用 -includes-include-libraries mxmlc 的选项编译器,强制链接器包含一个或多个单独的类(或整个 swc),而不应用我上面描述的“修剪优化”。

see adobe's site用于解释 mxmlc 命令行选项。

选项也可以是 specified in a config file ,允许您控制 flex 和/或 Flash IDE 如何在幕后调用编译器。

祝你好运!

关于flash - 使用 SWC - getDefinitionByName 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4103641/

相关文章:

actionscript-3 - 在纯 Actionscript 3 项目中将 .swc Assets 加载到数组中

apache-flex - 强制编译时链接 SWC 中的所有类

java - Android编程-如何显示.swf

javascript - SWF 上的 HTML 对象

Flash 共享对象(即 flash cookie)不与 Chrome 共享

android - 在 AIR for Android、Flash CS6 中使用“菜单”、“后退”、“主页”按钮

flash - Math.floor 是否像 ActionScript 3 中的 Math.round 一样?

java - 将 PDF 转换为 SWF

actionscript-3 - 8皇后问题

apache-flex - 在 Flash Builder 中对 Flexflash 库进行单元测试