gpt4 book ai didi

iphone - 制作 iPhone 应用程序时是否可以嵌入或加载 SWF(Apple 是否允许)

转载 作者:行者123 更新时间:2023-12-03 19:05:00 25 4
gpt4 key购买 nike

在为 iPhone 制作应用程序时,我对是否嵌入 swf 还是加载它们有点困惑。有谁知道每个的优点是什么(最好使用哪个)?我知道嵌入 swf 应该比加载它们快一点,但仅此而已吗?

另外,这很重要,我读到 Apple 将拒绝任何具有外部 swf 的应用程序?这确实是正确的吗?如果是这样,嵌入或加载所述swfs可以解决这个问题吗?

提前致谢

编辑: 经过一番搜索后,发现 Apple 确实在加载外部 swf 方面存在问题,您仍然可以这样做,但您的 swf 不需要附加任何 ActionScript ,这里有一个链接 http://whizzkid74.blogspot.com/2010/12/air-for-iphone-loading-external-swf.html 它但是没有提到嵌入 swf,所以我的问题是:在 iphone 上编写应用程序时可以嵌入 swf吗?

编辑 为了澄清,当我说外部 SWF 时。我的意思是在您的系统本地找到的 SWF,但您需要将它们添加到您的程序中,因为它们包含您需要的 MovieClips 或 Sprites 等。我并不是指需要从网站或在线资源下载的 SWF。 (希望能够澄清问题)

编辑更改了问题的标题...问题已解决,感谢所有帮助人员,新年快乐=D

最佳答案

更新,2012 年 10 月:

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

在撰写本文时,AIR 3.5 目前处于测试阶段,可在 adobe 实验室网站上获取:

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

旧答案:

我想更新这个答案,因为自从我第一次研究这个问题以来,我已经学到了很多关于这个问题的知识。

问题的根源在于,当使用 AIR 制作 iOS 应用程序时,Apple TOS 不允许运行时解释代码 - 这包括 SWF 字节码。因此,不允许加载带有代码的 SWF(即使是简单的动画命令,如 stop()、gotoAndPlay() 等),并且无法通过加载程序进行工作(AIR 3.5 之前的版本)。

  • 请注意,加载 SWF 的矢量图形内容是完全可以的。图形将显示,但代码将不会执行。

但是,有一些解决方法。这两种解决方法都通过将包含代码的资源编译到主 SWF 中来避免使用 Loader,因为一旦它们成为主 SWF 的一部分,AIR 编译器 (adt) 就会将代码交叉编译到 Objective-C 中,一切都会正常工作在 iOS 设备上。

使用 SWC 库

这是iOS开发的最佳选择。如果您将图形资源(.fla 文件)编译为 SWC(或从库中的符号导出 SWC),然后针对这些 SWC 编译主 swf,这将通过编译器,并且 ActionScript 代码将在 iOS 设备上执行。

使用 SWFMerge 进行[嵌入]编辑的 SWF

将资源嵌入到 SWF 中非常简单,如下所示:

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

public function main():void
{
var my_level:* = new GameLevel();
addChild(my_level);
}

在这种情况下,如果 gameLevel.swf 中有代码,它通常在 iOS 中不起作用,因为 new gameLevel() 将创建一个 Loader 并解释 SWF 字节码。但是,如果您首先通过我的名为 SWFMerge 的工具运行上述 SWF,它将获取您的嵌入式 SWF 并将其合并到您的根 SWF 中。然后 ADT 会将您的主 swf(包括嵌入代码)编译为 Objective-C,它将在 iOS 上运行,并注意:new gameLevel() 现在直接生成您的 Assets 实例 - 而不是加载器。

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 文件打包为 Assets ,即使它们包含代码,使用 Loader 也可以正常工作,因为该代码现在由 adt 进行 AOT 编译。这需要应用程序 xml 文件中根 SWF(不一定是资源)和以 3.5 结尾的 AIR 命名空间的 -swf-version=18 或更高版本。

但是,从技术上讲,解释 SWF 字节码是可能的,这只是 App Store 的法律限制。如果您只想在 iOS 设备上进行测试并且不想通过 App Store 分发您的应用程序,则可以使用 adt 的 -target ipa-test-interpreter 选项编译 SWF,并使用以下命令加载 SWF其中的代码将起作用。

关于iphone - 制作 iPhone 应用程序时是否可以嵌入或加载 SWF(Apple 是否允许),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8688645/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com