0

让我先提出问题。我需要在不嵌入的情况下从外部加载我在项目中使用过的所有图像。这些图像要么存在于皮肤中,要么存在于树中的项目的图标中。我在这里遇到了 IconUtility 类, 我可以对其进行修改并将其用于树,但问题是我们不能将 iconutility 用于同一组件来设置 2 个不同的皮肤(例如按钮 - upskin downskin)。我无法想到使用 iconutility 的解决方法。是否可以模拟嵌入并动态创建类并在运行时返回该类?

4

2 回答 2

0

就是我要找的东西......不幸的是,作者声称他无法将它用于按钮皮肤

于 2009-07-17T09:25:34.330 回答
0

完成这些事情的最简单的事情是创建一个/多个包含您的资产的 swfs,加载它,然后从那里拉出类(即从加载的 swfs 应用程序域)...

有多种解决方案:

  • 核心版本是使用 URLLoader 将这些图像加载到ByteArrays 中,然后创建一个新ByteArray的 swf 文件,其中包含嵌入的资产以及将它们与类链接的必要说明……您可能想看看 spark 的瑞士法西斯...
  • 更简单和高性能(因为你只做一次),是在服务器上做......在这里你可以
    • 只需使用flex 编译器
    • 使用 swfmill
    • 使用一些库来操作 swf,比如ming
    • 自己动手做... :)

希望有帮助

编辑:第二个解决方案是关于在服务器上创建资产,使用合适的工具......或自己编写工具,但这更像是一个笑话...... :)......我意识到,指向 flex 编译器的链接错了...想法是简单地将其插入您的 Web 服务器,然后让它编译一些 ActionScript,这将进行嵌入...因此您将生成一个如下所示的 ActionScript 文件:

package {
    import flash.display.Sprite;
    import flash.utils.describeType;
    public class Assets extends Sprite {
        [Embed(source='asset_1_Location')]
        public static var asset_1:Class;
        [Embed(source='asset_2_Location')]
        public static var asset_2:Class;
        ...
        [Embed(source='asset_n_Location')]
        public static var asset_n:Class;    
        public function Assets() { }
        public static function getAll():Object {
            var ret:Object = { };
            for each (var x:XML in describeType(Assets).variable.(@type=="Class")) {
                var name:String =  x.@name;
                ret[name] = Assets[name];
            }
            return ret;
        }
    }
}

然后让 flex 编译器对其进行编译...加载后,使用 LoaderInfo::applicationDomain.getDefinition("Assets").getAll() 提取数据,这将为您提供包含所有所需类的键值映射...

使用其他工具,它的工作方式会有所不同,但我希望这能澄清,它应该如何工作......

在服务器上,你需要一个服务,它会为你构建这些资产 swfs,并缓存它们......所以你发送一些 POST 请求,例如你需要的文件/图像的 JSON 数组,它会给您支持 swf ...服务器当然应该进行适当的缓存...

希望,现在它有帮助...... :)

问候

back2dos

于 2009-07-17T11:59:40.993 回答