actionscript-3 - 有没有办法只在编译时嵌入某些 Assets ?

标签 actionscript-3 mobile air

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

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

但是这个问题与 ATF 或压缩无关 - 我已经完成了所有工作。

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

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

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

关于实现此目标的最佳方法有什么想法吗?

谢谢

最佳答案

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

  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;
  }

或者如果您决定使用加载程序(尽管您必须修改构建以仅包含适当的 Assets 目录。)

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 符号链接(symbolic link)(对于 Mac/Linux)或复制(对于 Windows)您的 assets 目录在运行构建之前。这是一个预处理解决方案(如果您希望避免使构建复杂化),肯定还有其他解决方案。您可以处理 Flash Develop 的 .bat 文件,使其在构建之前运行预处理步骤。

关于actionscript-3 - 有没有办法只在编译时嵌入某些 Assets ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18144995/

相关文章:

actionscript-3 - 如何获得缩放的高度和宽度?

javascript - 如何与由 AS3 文件加载的 AS2 文件中的索引进行通信

actionscript-3 - 更改由 AS3 添加到舞台的影片剪辑中的动态文本字段不起作用?

mobile - 使用 PhoneGap 或 Sencha 进行语音识别

ios - AS3 AIR (ios) CameraRoll 保存问题

json - 如何在 Flex 3 中使用原生 JSON 或 actionjson 解码 Json

android - 使用超声波确定 2 个移动设备的相对位置

jQuery Mobile 在 .load() 之后没有点击事件

ios - 如何在 AIR for iOS 应用程序中明确设置可用语言?

javascript - 生成的 Javascript 不执行