AS3 / Flash - 使用外部SWF减少加载时间会导致可怕的工作流程

时间:2013-03-23 20:15:43

标签: actionscript-3 flash flash-builder flash-cs6

我们正在开发一款主要SWF超过30mb的大软件。为了减少加载时间,我们使用按需加载的外部SWF(例如,当单击某个GUI按钮或达到应用程序的某个阶段时)。为了将SWF的逻辑与主应用程序连接起来,我们首先加载外部SWF及其所有类定义,然后再设置图形和本地化文本。数据和逻辑是盲目设置的 - 我们(作为程序员)没有看到SWF使用哪个公共成员和变量(由GUI设计者创建),因此我们很容易在GUI开发和AS3编程的两侧发生错别字。但是 - 我们确实有可用的源代码,而且我们遇到的麻烦似乎是不必要的。

我们如何将Adobe Flash Pro的源代码与AS3代码相连接,AS3代码与相应的SWF一起使用,启用Flash Builder的代码辅助功能? 当您导入.fla的代码时,某些成员是未知的,因为它们只存在于.fla中。什么是推荐的工作流程?

3 个答案:

答案 0 :(得分:1)

最简单的连接方式是使用SWC而不是在运行时加载SWF,因为我从你的问题中了解到,由于大小限制,这个解决方案是不允许的。

您可以尝试的是要求设计人员作为SWC提供并为您获得的每个SWC创建自己的项目(在Flash构建器中)。现在你可以自动完成了,你仍然可以创建一个SWF,你现在可以用flash builder而不是flash cs6构建它,并且可以在运行时加载。

如果你这样设置,你可能会想要在多个项目中使用(部分)相同的代码,因此请确保创建一个所有'swc项目'正在使用的库/主项目。

现在确保使用-link-report编译main / library项目,并且模块使用-load-externs来排除主项目中已有的类。

答案 1 :(得分:1)

以下是我在处理小规模项目时如何做到这一点,然后我会写出如何缩放它的想法。

这些是在开发GUI的过程中采取的步骤:

  1. 有一般概念(程序员不参与,设计师用UI / UX或客户决定)。

  2. 设计人员和程序员审查在上一步中创建的一般方案,程序员为设计人员因工作而产生的SWC中必须存在的符号和其他资产创建必要的定义。 / p>

  3. 设计师接收“虚拟”定义,将它们连接到项目。每当她创建新符号或导入资产时,她都会将该资产链接到现有定义。

  4. 在一个阶段之后,当一些符号已经在SWC中时,设计者将SWC交给程序员。程序员使用他自己的定义(设计师从中定义了她的定义)。程序员使用这些定义来编写接口的功能部分并将它们连接到程序的其他部分。

  5. 通过循环执行这些步骤,我们能够逐渐向项目中添加更多组件,并相互独立地开发部分组件。 (可以在设计者之间分配工作量,这样每个人都可以使用他们之前选择使用的定义集来生成他们自己的SWC。)

    陷阱:

    1. 设计人员需要接受培训才能使用forklfow(很少有人知道如何将符号连接到现有定义,如何编译SWC)。但Flash CS中的功能就在那里。

    2. 人为错误(如果设计师在链接时输入错误 - 在图书馆交给程序员之前,她不会注意到它。)

    3. 避免人为错误

      在我的小规模项目中,我只是通过swfdump实用程序运行从SWC中提取的SWF,并将其管道到grep以查看是否存在符号定义。鉴于没有多少,可以手工完成。

      但是,由于您描述的项目较大,我会编写一个脚本,用于输入创建的大纲(ActionScript源文件)和SWC库。解压缩SWC,从中提取SWF,通过swfdump运行它,并验证源文件中的所有定义是否存在于SWF中。 在发送SWC之前,设计人员将负责运行此脚本,并确保至少在上次更新期间添加的符号/资产确实已将其添加到库中。

      分析仍然存在一些技术问题:重复的名称,可能的高级“噪音”,它仍然依赖于人来运行此检查,而不是使其类似于例如提交钩子。但这些似乎都无法解决 - 只要有足够的努力和创造力,就必须有可能提出一个确保完整性的应用程序。

答案 2 :(得分:0)

也许不是很有用,但我建议你的主应用程序应该负责所有关键的应用程序功能。特别是导航。

当您加载外部SWF时,该SWF应在其自己的“沙箱”内运行,并且仅以有限的方式与主应用程序通信: - 告诉主应用程序SWF已完全加载。 - 当用户完成/完成主应用程序需要知道的事情时,告诉主应用程序。

主应用程序永远不应该期望函数存在而不检查SWF是否存在以及它是否具有这些功能。 加载的SWF应仅调用主应用程序中的有限数量的功能,这些功能都已预先确定。