我的一位客户有很多SWF,他想把它们移植到iPad上。但是,他只有SWF,而不是FLA。
我想知道它是否是一种在Air for iOS应用程序中运行SWF的方法。我读过你可以使用Loader导入,但它们只会作为动画运行而忽略其中的所有代码。
谢谢,欢迎任何帮助!
[更新]我已经阅读了有关使用SWC的内容,但仍不确定是否会运行代码。
答案 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