【问题标题】:Extracting asset from swf file?从 swf 文件中提取资产?
【发布时间】:2009-05-22 09:13:58
【问题描述】:

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

谢谢!

【问题讨论】:

    标签: apache-flex actionscript-3 flash symbols


    【解决方案1】:

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

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

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

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

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

    这里是a demo,了解如何使用 FDT 进行操作。不确定您使用的是哪个工具。如果是商业 Flex Builder,流程应该类似。

    我想这就是你要找的。​​p>

    【讨论】:

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

    我会尝试创建一个资产/图标库 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}"
    

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

    【讨论】:

      【解决方案3】:

      这里有很多好的解决方案,如果您在运行时加载 swf 并想要提取资产,可以在加载器完成事件侦听器中执行以下操作:

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

      这会将 swf 中的资产存储为 Class 对象,因此您可以像这样创建它的实例:

      var asset:MovieClip = new c();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-05-27
        • 2012-03-21
        • 1970-01-01
        • 2023-03-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多