代码之家  ›  专栏  ›  技术社区  ›  futureelite7 Adam Rosenfield

从swf文件中提取资产?

  •  1
  • futureelite7 Adam Rosenfield  · 技术社区  · 16 年前

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

    3 回复  |  直到 16 年前
        1
  •  1
  •   BenMorel Manish Pradhan    11 年前

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

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

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

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

    如果您使用FDT,您可以选择自动添加SWC作为参数。

    这是 a demo 关于如何使用FDT实现这一点。不确定您使用的是哪种工具。如果是商业Flex Builder,则流程应该类似。

    我想这就是你要找的。

        2
  •  0
  •   kenneth    16 年前

    类似于

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

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

        3
  •  0
  •   Tyler Egeto    16 年前

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

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

    var asset:MovieClip = new c();