代码之家  ›  专栏  ›  技术社区  ›  PatrickS

使用SWCs-getDefinitionByName问题

  •  8
  • PatrickS  · 技术社区  · 14 年前

    所有的工作都很好,我可以创建我的电影嘴唇的实例,只要调用他们的类这样。

         //example 1
         var newMc:BaseClass = new GraphicAsset();
    

    现在,如果我想执行以下操作,Flash会抛出一个错误,GraphicsAssetClass为空!

        //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解决方案。

    2 回复  |  直到 14 年前
        1
  •  11
  •   Lee    14 年前

    问题是编译器将排除任何未直接引用的类 在某处 按设计 .

    var newMc:GraphicAsset;
    

    在SWF中的某个地方,它是从主执行路径引用的,然后是 GraphicAsset 将包含在最终swf中。然后你可以打电话。。。

    var GraphicsAssetClass:Class = getDefinitionByName("GraphicAsset") as Class;
    

    完全从别的地方来的,它会如你所期望的那样工作。

    甚至有可能(而且很常见)在 seaprate主权财富基金 装载机 使用swf getDefinitionByName("SomeClass) 加载 swf将是定义 class SomeClass ,和用途 var a:SomeClass; ,以确保将类内置到swf中。

    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

    祝你好运!

        2
  •  1
  •   Daniel    13 年前

    使用flashdevelopment修复这个问题非常简单。

    …现在可以使用getDefinitionByName从swc文件中获取未引用的类。