【问题标题】:What is the best way to share assets - icons/images - across multiple Flex applications?跨多个 Flex 应用程序共享资产(图标/图像)的最佳方式是什么?
【发布时间】:2010-11-01 13:31:58
【问题描述】:

我正在为我不久前创建的 Flex 应用程序创建一个新的“精简版”版本。我一直在将许多类和组件移植到编译 SWC 文件的 Flex 库项目中。因为两者都是 Cairngorm 应用程序,所以我无法完全消除重复代码,但我应该能够共享资产(例如图标(PNG 文件))似乎是合乎逻辑的。做这个的最好方式是什么?我已经尝试将它们包含在 SWC 中,但我不知道如何在应用程序中访问它们。如果你能帮我解决这个问题,那么我的问题就会得到解答。有什么想法吗?

这是我目前如何在我的 Flex 应用程序中嵌入图标/图像的示例:

<mx:Script>
    <![CDATA[
        [Bindable]
        [Embed(source="assets/icons/cancelIcon.png")]
        private var cancelIcon:Class;

        [Bindable]
        [Embed(source="assets/icons/saveIcon.png")]
        private var saveIcon:Class;
    ]]>
</mx:Script>

谢谢。

【问题讨论】:

    标签: apache-flex actionscript-3 swc


    【解决方案1】:

    0) 首先,看看上面的代码——我建议做一些小的改动:

    // Actionscript instead of MXML:
    public class ResourceClasses
    {
            Bindable]
            [Embed(source="assets/icons/cancelIcon.png")]
            public static var CancelIconClass:Class;
    
            // make your variable public and static without public no one 
            // outside the class can access AND bindable won't matter
    }
    

    ---- 现在,编译你的库。 ---- 如果资产不在正确的位置,编译器会抱怨

    1) 在你的应用中,需要引用库项目/swc

    ---- 您应该能够在 Flex Builder/eclipse 中从应用程序中的类到库项目中的类中获取代码提示/智能感知

    2) 在您的应用程序中 - 执行如下代码:

    var image:Image = new Image();
    image.source = ResourceClasses.CancelIconClass;
    
    // more image property setting... 
    
    someCanvas.addChild(image);
    

    3)这会让你开始 - 使用图书馆项目来保存图像等......

    *** 请注意:如果图像需要多次加载、重复使用等——还有其他步骤可以挤出最佳性能等...

    【讨论】:

    • 谢谢。上面的代码只是展示了我如何在不使用库的情况下将图像直接嵌入到应用程序中。我想我明白你的意思——实际上我昨晚在床上开始思考这些事情。图标存储为类,因此我可以将它们嵌入库中并将它们作为类引用,而不是使用 URL 将它们嵌入到我的库中。您能给我什么性能提示?
    • 遗憾的是,评论空间不足,不得不编辑。
      可能是一个新问题的主题,因为其他人无疑有很多要添加的 RE:Flex 中的资源和性能。简而言之,请参阅 Adob​​e:tinyurl.com/nwe4yotinyurl.com/dlvjr3 - 了解如何使用 RSL 组织您的网络应用程序,以避免立即关闭整个应用程序并让用户等待。
      另请参阅在 BitmapAsset @tinyurl.com/muy8dotinyurl.com/muy8do
    【解决方案2】:

    Livedocs 的这一部分对您来说会很有趣:

    http://livedocs.adobe.com/flex/3/html/help.html?content=building_overview_5.html

    您是否有具体示例说明如何嵌入资产并尝试在无法正常工作的最终 swc 中使用它们?您认为您的问题在于将它们嵌入到 swc 中还是在实际应用中从 swc 中使用它们?

    【讨论】:

    • 将资产添加到库项目然后构建 SWC 没有问题。引用 SWC 和 SWC 中的其他类也没有问题。我只是不知道如何从我的 Flex 应用程序中的 SWC 访问资产。
    • 您能举个例子说明您尝试过的方法但没有奏效吗?您是否嵌入资产并将它们与类变量相关联?如果是这样,你不能只在最终应用程序中引用该变量吗?我只是在想一个具体的例子会有助于澄清。
    • 示例添加到上面的原始问题。
    【解决方案3】:

    好吧,根据@Gabriel 的建议,这就是我最终得到的结果:

    package
    {
        [Bindable]
        public class ResourceClasses
        {
            [Embed(source="assets/icons/cross.png")]
            public static var CancelIconClass:Class;
        }
    }
    

    在我的应用程序中这样引用:

    <?xml version="1.0" encoding="utf-8"?>
    <mx:Box xmlns:mx="http://www.adobe.com/2006/mxml">
        <mx:Button label="Cancel Changes" icon="{ResourceClasses.CancelIconClass}" />
    </mx:Box>
    

    谢谢!

    【讨论】:

    • 好东西 - 如果您发现需要一遍又一遍地重复使用取消图标或其他图像 - 请务必查看 BitmapAsset - 如果您需要一点帮助 - 提出问题 -很乐意提供帮助。
    • 哦 - 注意到原始答案中有关 cmets 性能的一些 URL。
    • 我有点困惑。既然你的图标都来自SWC文件,那么[Embed(source="assets/icons/cross.png")]这个路径是什么意思?
    猜你喜欢
    • 2011-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-31
    • 2010-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多