2009-05-22 77 views
1

当我构建一个用于minigames的Flex框架时,我计划将一堆图形资源(动画片段符号)捆绑到一个swf文件中,我将其加载到我的Flex应用程序中,然后从swf文件中提取符号以供使用在我的应用程序。我的问题是:我如何通过actionscript来做到这一点?从swf文件中提取资产?

谢谢!

回答

1

如果您不想使用EMBED并且您不想在运行时加载资源,我建议您将SWF导出为SWC。

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

-library-path C:\path\to\your\file.swc 

如果您使用FDT你有一个选项来自动添加SWC作为参数:

如果您正在使用Flex编译器,然后当你编译记得添加此。

这里是a demo关于如何使用FDT做到这一点。不确定你使用哪个工具。如果它是商业Flex Builder,则过程应该类似。

我想这就是你要找的。

+0

+1对于推荐SWC方法 - 我其实并没有想到那个。在某些情况下,无需运送额外的SWF可能是一个优势,但对于基于Web的应用程序,它也可能导致更大的SWF。尽管如此,根据具体情况,可以提醒它是一种选择。 – 2009-05-22 20:36:26

0

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

东西沿着

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}" 

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

0

地块的位置不错的解决方案,这里有一个,如果你在运行时加载的SWF文件,并要提取的资产,你可以做你的装载机以下完整的事件侦听器:

var c:Class = Class(LoaderInfo(e.target).applicationDomain.getDefinition("myClassDefinitionName")); 

这将存储资产从swf作为Class对象,因此您可以创建它的实例,如下所示:

var asset:MovieClip = new c();