r3x*_*r3x 4 air iphone flash actionscript actionscript-3
我在为iPhone制作应用程序时是否嵌入swfs或加载它们有点困惑.有谁知道每个的优点(最好使用)?我知道嵌入swfs应该比加载它们快一点但是这就是全部吗?
此外,这有点重要,我读到Apple会拒绝任何带有外部swfs的应用程序?那确实是对的吗?如果是这样,嵌入或加载所述swfs会解决这个问题吗?
提前致谢
编辑:经过一些搜索,转向Apple确实有加载外部swfs的问题,你仍然可以做到,但你的swfs不需要附加任何动作脚本,这里是一个链接http://whizzkid74.blogspot.com/2010/ 12/air-for-iphone-loading-external-swf.html然而,它没有说嵌入swfs,所以我的问题是:你可以在iPhone上编写应用程序时嵌入swfs吗?
编辑澄清一下,当我说外部SWF时.我的意思是在您的系统本地找到的SWF,但您需要将它们添加到您的程序,因为它们包含您需要的MovieClips或Sprite等.我不是指您需要从网站或在线资源下载的SWF.(希望澄清事情)
编辑改变了问题的标题......问题解决了,感谢所有的帮助家伙和新年快乐= D.
更新,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文件中.
老答案:
我想更新这个答案,因为自从我第一次研究这个问题以来,我已经学到了很多关于这个问题的知识.
问题的根源在于,当使用AIR制作iOS应用程序时,Apple TOS不允许对代码进行运行时解释 - 这包括SWF字节码.因此,不允许加载带有代码的SWF(甚至是简单的动画命令,如stop(),gotoAndPlay()等),并且不能通过Loader(在AIR 3.5之前)工作.
但是,有一些解决方法.这两种解决方法都是通过将带有代码的资产编译到主SWF中来避免Loader,因为一旦它们成为主SWF的一部分,AIR编译器(adt)就会将代码交叉编译为objective-c,一切都会正常工作在iOS设备上.
使用SWC库
这是iOS开发的最佳选择.如果您将图形资源(.fla文件)编译为SWC(或从库中的符号导出SWC),然后针对这些SWC编译主swf,这将通过编译器和actionscript代码在iOS设备上执行.
使用SWFMerge [嵌入] ed SWF
将资源嵌入SWF非常简单,如下所示:
[Embed(source="GameLevel.swf")]
private var GameLevel:Class;
public function main():void
{
var my_level:* = new GameLevel();
addChild(my_level);
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,如果gameLevel.swf中包含代码,它通常在iOS中不起作用,因为新的gameLevel()会创建一个Loader并解释SWF字节码.但是,如果您首先通过我的名为SWFMerge的工具运行上述SWF,它将使用您的嵌入式SWF并将其合并到您的根SWF中.然后ADT会将你的主swf(包括嵌入代码)编译成objective-C,它将在iOS上工作,并注意:new gameLevel()现在直接在你的资产实例中产生 - 而不是一个Loader.
SWFMerge工具在这里:
http://www.onetacoshort.com/temp/SWFMerge_alpha.swf
如果此解决方法适合您或您遇到问题,请在评论中告诉我.
使用装载机
在AIR 3.5之前,如果使用Loader加载SWF文件(无论此swf是否包含在您的IPA中或从Web服务器提供),目标SWF图形将加载正常,但SWF中的代码将不再执行,因为Apple的TOS不允许这样做.
从AIR 3.5开始,将.ipa中的SWF文件打包为资产,使用Loader即使它们包含代码也会起作用,因为此代码现在由adt进行AOT编译.这需要-swf-version = 18或更高的根SWF(不一定是资产)和AIR命名空间以3.5结尾的应用程序xml文件中.
但是,技术上可以解释SWF字节码,它只是App Store的法律限制而不是.如果您只想在iOS设备上进行测试而不会通过App Store分发您的应用程序,则可以使用adt -target ipa-test-interpreter选项编译SWF ,并在其中加载包含代码的SWF.
| 归档时间: |
|
| 查看次数: |
6125 次 |
| 最近记录: |