Apache flex 从swf文件中提取资产?

Apache flex 从swf文件中提取资产?,apache-flex,actionscript-3,flash,symbols,Apache Flex,Actionscript 3,Flash,Symbols,当我为小游戏构建Flex框架时,我计划将一组图形资源(movieclip符号)捆绑到一个swf文件中,然后将其加载到Flex应用程序中,然后从swf文件中提取符号以在应用程序中使用。我的问题是:如何通过actionscript做到这一点 谢谢 我会尝试创建一个资源/图标库作为文件 类似于 package { public class IconLibrary { /* * Framework Icons */ [Embed (source="../asse

当我为小游戏构建Flex框架时,我计划将一组图形资源(movieclip符号)捆绑到一个swf文件中,然后将其加载到Flex应用程序中,然后从swf文件中提取符号以在应用程序中使用。我的问题是:如何通过actionscript做到这一点


谢谢

我会尝试创建一个资源/图标库作为文件

类似于

package 
{

public class IconLibrary
{

    /*
    *  Framework Icons
    */

    [Embed (source="../assets/fof_graphics.swf", symbol="clapperboard_icon")]
    public static const clapperBoardIcon:Class;
    [Embed (source="../assets/fof_graphics.swf", symbol="clapperboard_over_icon")]
    public static const clapperBoardOverIcon:Class;
    [Embed (source="../assets/fof_graphics.swf", symbol="close_button")]
    public static const closeButton:Class;
    [Embed (source="../assets/fof_graphics.swf", symbol="close_over")]
    public static const closeOverButton:Class;

    public function IconLibrary()
    {
    }

  }

}
那么你需要做的就是

source="{IconLibrary.clapperBoardIcon}"

或者您希望显示的资产的任何名称。

我会尝试创建一个资产/图标库作为文件

类似于

package 
{

public class IconLibrary
{

    /*
    *  Framework Icons
    */

    [Embed (source="../assets/fof_graphics.swf", symbol="clapperboard_icon")]
    public static const clapperBoardIcon:Class;
    [Embed (source="../assets/fof_graphics.swf", symbol="clapperboard_over_icon")]
    public static const clapperBoardOverIcon:Class;
    [Embed (source="../assets/fof_graphics.swf", symbol="close_button")]
    public static const closeButton:Class;
    [Embed (source="../assets/fof_graphics.swf", symbol="close_over")]
    public static const closeOverButton:Class;

    public function IconLibrary()
    {
    }

  }

}
那么你需要做的就是

source="{IconLibrary.clapperBoardIcon}"

或者您希望显示的资产的名称。

如果您不想使用嵌入,也不想在运行时加载资产,我建议您将swf导出为SWC

这样,您可以从actionscript浏览SWC文件。您可以在编译时检查另一个movieclip中是否存在子movieclip

如果您使用的是flex编译器,请记住在编译时添加以下内容:

-library-path C:\path\to\your\file.swc
如果您使用FDT,您可以选择自动添加SWC作为参数

下面介绍如何使用FDT进行此操作。不确定您使用的是哪种工具。如果是商业Flex Builder,则流程应该类似


我认为这正是您需要的。

如果您不想使用嵌入,也不想在运行时加载资产,我建议您将swf导出为SWC

这样,您可以从actionscript浏览SWC文件。您可以在编译时检查另一个movieclip中是否存在子movieclip

如果您使用的是flex编译器,请记住在编译时添加以下内容:

-library-path C:\path\to\your\file.swc
如果您使用FDT,您可以选择自动添加SWC作为参数

下面介绍如何使用FDT进行此操作。不确定您使用的是哪种工具。如果是商业Flex Builder,则流程应该类似


我认为这就是您要寻找的。

这里有很多好的解决方案,如果您在运行时加载swf并希望提取资产,可以在loader complete event listener中执行以下操作:

var c:Class = Class(LoaderInfo(e.target).applicationDomain.getDefinition("myClassDefinitionName"));
这将swf中的资产存储为类对象,以便您可以像这样创建其实例:

var asset:MovieClip = new c();

这里有很多好的解决方案,如果您在运行时加载swf并希望提取资产,可以在loader complete event listener中执行以下操作:

var c:Class = Class(LoaderInfo(e.target).applicationDomain.getDefinition("myClassDefinitionName"));
这将swf中的资产存储为类对象,以便您可以像这样创建其实例:

var asset:MovieClip = new c();

+1推荐SWC方法——实际上我没有想到这一点。在某些情况下,不必提供额外的SWF可能是一个优势,尽管对于基于Web的应用程序,这也可能导致更大的SWF。尽管如此,根据具体情况,提醒你这是一个不错的选择。谢谢。这是一个解决方案,而不是解决方案。对于资产不经常更改且文件大小不重要的情况非常有用“例如交互式应用程序”。我强烈建议您在为那些可能需要更改的文件使用SWC的同时使用运行时资产。我们不想为了更改图像而重新编译所有内容,对吗?:)您还可以根据RSL(运行时共享库,基本上是在运行时加载的swc)进行编译,这样您以后仍然可以更新swc并将其编写为强类型。+1推荐使用swc方法——实际上我没有想到过这种方法。在某些情况下,不必提供额外的SWF可能是一个优势,尽管对于基于Web的应用程序,这也可能导致更大的SWF。尽管如此,根据具体情况,提醒你这是一个不错的选择。谢谢。这是一个解决方案,而不是解决方案。对于资产不经常更改且文件大小不重要的情况非常有用“例如交互式应用程序”。我强烈建议您在为那些可能需要更改的文件使用SWC的同时使用运行时资产。我们不想为了更改图像而重新编译所有内容,对吗?:)您还可以根据RSL(运行时共享库,基本上是运行时加载的swc)进行编译,这样您以后仍然可以更新swc并将其强类型化。