0

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

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

4

3 回答 3

1

最简单的连接方法是使用 SWC 而不是在运行时加载 SWF,正如我从您的问题中了解到的那样,由于大小限制,不允许使用此解决方案。

您可以尝试让设计人员以 SWC 的形式交付,并为您获得的每个 SWC 创建您自己的项目(在 flash builder 中)。现在您获得了自动完成功能,您仍然可以创建一个 SWF,您现在可以从 flash builder 而不是 flash cs6 构建它,并且可以在运行时加载。

如果您像这样设置它,您可能希望在多个项目中使用(部分)相同的代码,因此请确保创建所有“swc 项目”都在使用的库/主项目。

现在确保主/库项目是使用编译-link-report的,并且模块用于-load-externs排除主项目中已经存在的类。

于 2013-03-24T07:54:04.837 回答
1

以下是我过去在处理较小规模的项目时的做法,然后我会写下关于如何扩展它的想法。

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

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

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

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

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

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

陷阱:

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

  2. 人为错误(如果设计师在链接时打错字 - 在库交给程序员之前她不会注意到它)。

避免人为错误

在我较小规模的项目中,我只是通过swfdump实用程序运行从 SWC 中提取的 SWF,并将其通过管道传输到 grep 以查看符号定义是否存在。由于数量不多,因此可以手动完成。

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

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

于 2013-03-25T09:32:33.943 回答
0

也许不是很有帮助,但我建议您的主应用程序应该负责所有应用程序关键功能。尤其是导航。

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

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

于 2014-10-22T09:56:46.423 回答