是否可以将现有的SWF嵌入到Air for iOS应用程序中?

时间:2012-02-29 22:17:49

标签: ios actionscript-3 flash

我的一位客户有很多SWF,他想把它们移植到iPad上。但是,他只有SWF,而不是FLA。

我想知道它是否是一种在Air for iOS应用程序中运行SWF的方法。我读过你可以使用Loader导入,但它们只会作为动画运行而忽略其中的所有代码。

谢谢,欢迎任何帮助!

[更新]我已经阅读了有关使用SWC的内容,但仍不确定是否会运行代码。

2 个答案:

答案 0 :(得分:2)

更新,2012年10月:

在Adobe AIR 3.5中,adl引入了一项名为“多个SWF支持”的功能,允许使用加载程序加载.ipa(本地文件,而不是服务器)中提供的SWF,以便在其中包含代码。 adl编译器AOT编译包含在.ipa中的SWF,允许它们加载并在iOS下工作。

撰写本文时,AIR 3.5目前处于测试阶段,可在adobe labs网站上找到:

请注意,此功能需要-swf-version = 18或更高版本的根SWF(不一定是正在加载的资产)和AIR命名空间以3.5结尾的应用程序xml文件。

旧答案:

外部带有代码的SWF不起作用的原因是Air的ADT编译器将您的根SWF(以及只有您的根swf)交叉编译为iOS设备可以使用的objective-c代码。 [embedded] SWF和包含在.ipa(AIR 3.5之前)中的SWF都不是交叉编译的。

我为嵌入式资产的这个问题创建了一个解决方法:

[Embed(source="gameLevel.swf")]
  private var gameLevel:Class;

 ...

 addChild(new gameLevel());

在这种情况下,如果gameLevel.swf中包含代码,它通常在iOS中不起作用,因为新的gameLevel()会创建一个Loader并解释SWF字节码。但是,如果您首先通过我的名为SWFMerge的工具运行上述SWF,它将采用您的嵌入式SWF并将其合并到您的根SWF中。结果是ADT会将您的嵌入代码编译为objective-C,它将在iOS上运行,并注意:new gameLevel()现在会生成您的资产实例 - 而不是Loader。

SWFMerge工具在此处:

http://www.onetacoshort.com/temp/SWFMerge_alpha.swf

LMK如果此解决方法适合您或您遇到问题。干杯!

-Jeff

答案 1 :(得分:1)

是的,你可以,

Apple不允许您的应用程序从互联网上使用Loader下载SWF,但您可以嵌入并将其包含在.ipa中

要执行此操作,您将使用embed标记

[Embed("myswf.swf", mimeType="application/octet-stream")] private var mySwf:Class;

然后您可以使用

swf = new mySwf();
swf.addEventListener(Event.COMPLETE, completeHandler);

与整个处理程序内的swf进行交互

我想补充一点,可以编译一个无法加载的SWF