【问题标题】:Is there any way of only embedding certain assets at compile time?有没有办法只在编译时嵌入某些资产?
【发布时间】:2013-08-14 23:33:14
【问题描述】:

我在 FlashDevelop 中设置了一个 x 平台 AIR 项目。 相同的代码库可以发布到 iOS 或 android 目标。 我正在使用 Adob​​e 的纹理格式 (ATF) 压缩纹理图集,目前我将所有压缩文件嵌入到每个 atf 容器文件中(因此它包括桌面、iOS 和安卓 GPU 芯片组的纹理)

我的问题是我们的应用程序包含许多纹理图集,显然我们希望将下载量保持在最低限度,所以我想分别压缩不同的目标(即会有一个 atf 文件只有 pvrtc 压缩iOS,另一个只包含安卓的 etc1 压缩)并且只包含每个平台的兼容文件。

然而,这个问题与 ATF 或压缩无关 - 我已经完成了这一切。

我想知道的是:有没有在编译时只包含必要(目标兼容)文件的解决方案?

我目前正在使用嵌入元数据来包含 .atf 文件,我认为元数据无法在编译时动态修改(即将嵌入源从 xxx_ios.atf 切换到 xxx_android.atf,具体取决于选择了哪个目标)

我想可能还有其他解决方案,即在运行时使用加载器,并且只在编译时使用 adt 编译器中的参数包含适当的资产文件夹,但这并不理想 - 一个可以嵌入文件列表的简单开关我认为在编译时会更好/更优雅,特别是如果我可以让它纯粹是动态的,所以它被项目的目标配置/包含,而不必手动切换导入语句。

关于实现这一目标的最佳方法的任何想法?

谢谢

【问题讨论】:

  • 您可以将每个目标资产编译成单独的 SWC(即桌面、ios、android 各一个)。然后根据发布目标包含适当的 SWC。
  • 那确实可以,李,干杯。在这种情况下,我发现这可能不是可行的方法(因为所有嵌入式资产都将使用主 swf 加载到系统内存中 - 在移动设备上不是一个好主意),并决定在运行时加载资产。但是是的,我认为编译后的 swc 和链接显然是一个优雅的解决方案,而不是使用嵌入元数据
  • 如果您使用的是 Flash Builder,我建议您这样做:stackoverflow.com/questions/9178316/… - 也许 Flash Develop 也有类似的东西?或者,如果 FD 以与 FB 相同的方式编译,它甚至可能以相同的方式工作

标签: actionscript-3 mobile air


【解决方案1】:

条件编译是使用嵌入时完成此任务的一种方法:

  CONFIG::IOS {
    [Embed(source="foo_ios.atf", mimeType="application/octet-stream")]
      private var foo:Class;
  }

  CONFIG::ANDROID {
    [Embed(source="foo_android.atf", mimeType="application/octet-stream")]
      private var foo:Class;
  }

或者,如果您决定使用加载器(尽管您必须修改构建以仅包含正确的资产目录。)

CONFIG::IOS {
  var url:String = "foo_ios.atf"
}

CONFIG::ANDROID {
  var url:String = "foo_android.atf"
}

然后您需要使用以下定义修改构建选项(请注意,您必须同时定义两者,将一个设置为 true,一个设置为 false)。 Flash Develop 中有一个用于此的菜单(请参阅Flash Develop article,特别是中间的User-defined constants 部分),但这里是您将定义的编译器命令:

对于 iOS:

mxmlc Main.as -define=CONFIG::IOS,true -define=CONFIG::ANDROID,false

对于安卓:

mxmlc Main.as -define=CONFIG::IOS,false -define=CONFIG::ANDROID,true

或者,您也可以在运行构建之前从assets_iosassets_android 符号链接(对于Mac/Linux)或复制(对于Windows)您的assets 目录。这是一个预处理解决方案(如果您希望避免使构建复杂化),肯定还有其他解决方案。您可以随意使用 Flash Develop 的 .bat 文件,使其在构建之前运行预处理步骤。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-31
    • 2023-03-22
    • 2019-10-08
    • 2016-02-04
    • 1970-01-01
    相关资源
    最近更新 更多