getDefinitionByName的替代方案

时间:2011-03-01 09:25:18

标签: actionscript-3 flash-cs4 flash flash-cs5

在过去,有一个简单的技巧,通过在 makefile中添加以下行来包含 mxmlc模块:

-include-libraries “/absolute/path/to/my/assets/assets.swc” 

这使您能够使用getDefinitionByName,一个辅助函数来访问嵌入的swc资产库(而不是创建手写类的所有资产)。

不幸的是,自以来,已停止工作。有人知道另一种解决方案吗?

3 个答案:

答案 0 :(得分:4)

不幸的是,我发现的唯一解决方法是在代码中的某处明确引用每个资产类。您可以创建这样的虚拟类:

public class AssetsExporter extends Sprite
{   
  public static function export()
  {
    AssetClass1;
    AssetClass2;
    //etc

    trace( "DEBUG AssetsExporter.export()" );
  }
}

在Flash IDE中将此类指定为Document类,因此它将被编译为生成的swc。然后在您的应用程序调用的主代码中

AssetsExporter.export();

执行此操作后,您将能够使用getDefinitionByName()。

答案 1 :(得分:1)

您可以在发布设置中将它们添加到库中。

Publish Settings

(来自http://wiki.gigya.com/的图片来自Google图片)

顺便说一句,如果你使用SWC文件,你也可以

new somepackage.SomeClass();

而不是

new getDefinitionByName("somepackage.SomeClass")

适用的地方。这是因为SWC文件包含在编译时,而不是运行时。

答案 2 :(得分:0)

即使您可以手动更改编译器设置,如果您使用FlashDevelop也很容易,因为这很容易修复。

右键单击项目列表中包含的swc。选择选项,然后“包含库(完整库)”。

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