2009-07-17 69 views
0

让我首先提出问题。 我需要加载我在外部没有嵌入的项目中使用的所有图像。 图像以皮肤或作为树木物品的图标显示。 我遇到了IconUtility类here 我能够修改它并将它用于树,但问题是我们不能使用同一个组件的iconutility来设置2个不同的皮肤(就像一个按钮 - upskin下皮)。 我无法想象iconutility的解决方法。 是否可以模拟嵌入并动态创建类并在运行时返回类?在actionscript中动态创建类

+0

后更新中...格尔茨 – back2dos 2009-07-22 10:37:40

回答

0

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

有多种解决方案,即:

  • 硬派版本将这些图像加载到ByteArray s使用URLLoader,然后创建一个新的ByteArray,这将是一个SWF文件,其中包含嵌入资产和必要的说明,以将它们与类...你可能想看看火花的swfassist ...
  • 有点更简单和高性能的(因为你只这样做一次),是做到这一点的服务器上...在这里,你可以
    • 只需使用flex compiler
    • 使用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 = [email protected]; 
       ret[name] = Assets[name]; 
      } 
      return ret; 
     } 
    } 
} 

然后让Flex编译器编译它......当加载时,使用LoaderInfo :: applicationDomain.getDefinition(“Assets”)。getAll()提取数据,它将为您提供所有需要的类的键值映射。 ..

与其他工具,它的工作方式不同,但我希望这澄清,应该如何工作...

服务器上

,你需要的服务,将构建这些资产的主权财富基金给你,并缓存它们...所以你发送了一些POST请求,例如用你需要的JSON数组文件/图像,它会给你回swf ...服务器应该做适当的缓存,当然...

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

格尔茨

back2dos

+0

感谢您的反馈意见。第一个解决方案确实是硬核,我无法理解第二个解决方案。你能详细解释一下吗? – dante 2009-07-22 07:12:34

0

This就是我一直在寻找......不幸的是,作者声称他不能够使用它的按钮皮肤