【问题标题】:Creating a class dynamically in actionscript在 actionscript 中动态创建一个类
【发布时间】:2009-07-17 07:29:34
【问题描述】:

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

【问题讨论】:

    标签: apache-flex actionscript-3 embedded-resource dynamic-class


    【解决方案1】:

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

    对此有多种解决方案:

    • 硬核版本是使用 URLLoader 将这些图像加载到 ByteArrays 中,然后创建一个新的 ByteArray,这将是一个 swf 文件,包含嵌入的资产和将它们与类链接的必要说明.. . 你可能想看看 spark 的 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 =  x.@name;
                    ret[name] = Assets[name];
                }
                return ret;
            }
        }
    }
    

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

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

    在服务器上,您需要一个服务,该服务将为您构建这些资产 swf,并缓存它们……因此您发送一些 POST 请求,例如您需要的 JSON 文件/图像数组,然后它会把swf还给你...服务器当然应该做适当的缓存...

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

    问候

    back2dos

    【讨论】:

    • 感谢您的反馈。第一个解决方案真的很核心,我无法理解第二个解决方案。能详细解释一下吗?
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2012-07-01
      • 2011-03-01
      • 2017-04-15
      • 2016-03-29
      • 2011-09-29
      • 2015-12-29
      • 1970-01-01
      • 1970-01-01
      • 2015-08-20
      相关资源
      最近更新 更多