Actionscript 3 有没有办法只在编译时嵌入某些资产?

Actionscript 3 有没有办法只在编译时嵌入某些资产?,actionscript-3,mobile,air,Actionscript 3,Mobile,Air,我在FlashDevelop建立了一个x-platform空中项目。 相同的代码库可以发布到iOS或android目标。 我将Adobe的纹理格式(ATF)用于压缩纹理地图集,目前我正在将所有压缩文件嵌入每个ATF容器文件中(因此它包括桌面、iOS和android GPU芯片组的纹理) 我的问题是,我们的应用程序包含许多纹理地图集,显然我们希望将下载量保持在最低限度,因此我想分别对不同的目标进行压缩(即,将有一个atf文件,其中仅包含iOS的pvrtc压缩,另一个文件仅包含android的etc

我在FlashDevelop建立了一个x-platform空中项目。 相同的代码库可以发布到iOS或android目标。 我将Adobe的纹理格式(ATF)用于压缩纹理地图集,目前我正在将所有压缩文件嵌入每个ATF容器文件中(因此它包括桌面、iOS和android GPU芯片组的纹理)

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

问题与自动变速驱动桥油液或压缩无关,但是-我的所有功能都正常工作

我想知道的是:是否有一种解决方案,可以在编译时只包含必要的(与目标兼容的)文件

我目前正在使用嵌入元数据来包含.atf文件,我认为元数据不能在编译时动态修改(即根据选择的目标将嵌入源从xxx_ios.atf切换到xxx_android.atf)

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

关于实现这一目标的最佳方法有什么想法


感谢

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

  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;
  }
或者,如果您决定使用加载程序(尽管您必须修改构建以仅包含正确的资产目录)

然后,您需要使用以下定义修改构建选项(注意,您必须同时定义这两个选项,将一个设置为true,另一个设置为false)。Flash Develop中有一个菜单(具体请参见中间的
用户定义常量
部分),但以下是您将定义的编译器命令:

对于iOS:

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

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

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

您可以将每个目标资产编译成单独的SWC(即桌面、ios、android各一个)。然后根据出版目标加入适当的SWC。这确实会奏效,Lee,干杯。在这个例子中,我发现这可能不是一个可行的方法(因为所有嵌入式资产都将使用主swf加载到系统内存中,这在移动设备上不是一个好主意),因此我决定在运行时加载资产。但是,是的,我认为编译的swc和链接显然是一个Elegent解决方案,而不是使用嵌入元数据。如果您使用的是FlashBuilder,我建议:-也许FlashDevelop也有类似的功能?或者,如果FD以与FB相同的方式编译,它甚至可能以相同的方式工作
mxmlc Main.as -define=CONFIG::IOS,false -define=CONFIG::ANDROID,true