让我先提出问题。我需要在不嵌入的情况下从外部加载我在项目中使用过的所有图像。这些图像要么存在于皮肤中,要么存在于树中的项目的图标中。我在这里遇到了 IconUtility 类, 我可以对其进行修改并将其用于树,但问题是我们不能将 iconutility 用于同一组件来设置 2 个不同的皮肤(例如按钮 - upskin downskin)。我无法想到使用 iconutility 的解决方法。是否可以模拟嵌入并动态创建类并在运行时返回该类?
2 回答
这就是我要找的东西......不幸的是,作者声称他无法将它用于按钮皮肤
完成这些事情的最简单的事情是创建一个/多个包含您的资产的 swfs,加载它,然后从那里拉出类(即从加载的 swfs 应用程序域)...
有多种解决方案:
- 核心版本是使用 URLLoader 将这些图像加载到
ByteArray
s 中,然后创建一个新ByteArray
的 swf 文件,其中包含嵌入的资产以及将它们与类链接的必要说明……您可能想看看 spark 的瑞士法西斯... - 更简单和高性能(因为你只做一次),是在服务器上做......在这里你可以
希望有帮助
编辑:第二个解决方案是关于在服务器上创建资产,使用合适的工具......或自己编写工具,但这更像是一个笑话...... :)......我意识到,指向 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