我有一个针对 Flash 7 的大型代码库,其中包含 很多 AS2 类。我希望能够将 Flex 用于任何新项目,但我们路线图中的许多新内容都是对旧代码的补充。

AS2 和 AS3 的语法通常是相同的,所以我开始想知道将当前的代码库移植到 Flex/AS3 会有多困难。我知道所有与 UI 相关的内容都是不确定的(当前 UI 是在运行时使用大量 createEmptyMovieClip() 和 AttachMovie() 内容生成的),但 UI 和控制器/模型内容大部分是分开的。

有人尝试过将 AS2 代码的大型代码库移植到 AS3 吗?有多难?你遇到过哪些陷阱?对于开展此类项目的方法有什么建议吗?

有帮助吗?

解决方案

我在尝试将大量 AS2 类转换为 AS3 时看到的一些值得注意的问题:

包命名

class your.package.YourClass
{
}

变成

package your.package
{
    class YourClass
    {
    }
}

需要进口

您必须显式导入所使用的任何外部类——通过它们的完全限定名称来引用它们已经不够了。

接口方法不能标记为“公共”

这是完全有道理的,但是 AS2 会让你这样做,所以如果你有任何它们,就需要将其删除。

显式“覆盖”关键字

任何重写父类函数的函数都必须使用 覆盖 关键字,很像 C#。同样,如果您有扩展其他接口并重新声明函数的接口,则必须删除这些覆盖(同样,与 民众, 无论如何,这个表示法没有意义,但 AS2 让你这样做)。

所有 Flash 内置内容均已更改

您在上面提到过这一点,但现在是 flash.display.MovieClip 而不是仅仅 电影剪辑, 例如。这个类别有很多细节,我没有足够多的时间来找到它们,但这里会有很多烦恼。

结论

我没能在这个转换上取得成功,但我能够在几个小时内编写一个快速的 C# 工具,该工具可以处理除了以下方面之外的各个方面: 覆盖 关键词。自动化导入可能很棘手——在我的例子中,我们使用的包都以一些根级包开头,因此它们很容易检测到。

其他提示

首先,我希望你没有使用 eval() 在您的项目中,因为 AS3 中没有等效项。

我要做的一件事就是经历 Adobe 的迁移指南 (基本上只是已更改内容的逐项列表)逐项并尝试找出每个项目是否可以通过简单的搜索和替换操作(可能使用正则表达式)进行更改,或者手动编辑出现的情况是否更容易对应AS3。可能在很多情况下(特别是如果,正如您所说,要迁移的代码量相当高)您最好编写更改脚本(即使用正则表达式搜索和替换)并手动修复自动更改失败的任何边界情况。

准备好留出一些时间进行一些调试并运行一些测试用例。

另外,正如其他人已经提到的那样,尝试将 AS2 SWF 与 AS3 SWF 结合起来并不是一个好主意,甚至根本不起作用,因此您肯定必须立即迁移一个项目中的所有代码。

以下是从 AS2 迁移到 AS3 的一些其他参考:

Grant Skinners AS3 入门研讨会幻灯片http://gskinner.com/talks/as3workshop/

李·布里梅洛:学习 ActionScript 3 的 6 个理由http://www.adobe.com/devnet/actionscript/articles/six_reasons_as3.html

科林·莫克:Essential ActionScript 3(被视为 ActionScript 开发人员的“圣经”):http://www.amazon.com/Essential-ActionScript-3-0/dp/0596526946

迈克·钱伯斯

mesh@adobe.com

我的经验是,迁移到 AS3 的最佳方法是分两个阶段 - 第一个阶段是结构阶段,第二个阶段是语法阶段。

首先,在保留 AS2 的情况下进行多轮重构,但尽可能接近 AS3 架构。当然,这包括将所有框架脚本和 #include 脚本移动到包和类中,但您可以做更微妙的事情,例如更改所有事件侦听器和调度程序以遵循 AS3 流程(使用事件类型的静态类属性,并通过方法注册而不是按对象)。您还需要摆脱所有“内置”事件(例如 onEnterFrame),并且您需要仔细研究重要的鼠标交互(例如拖动)和键盘交互(例如检测是否按下一个键)。此阶段可以逐步完成。

第二阶段是从 AS2 转换为 AS3 - 将“_x”更改为“x”,以及所有 API,等等。这不能逐步完成,您必须一次性完成尽可能多的工作,然后开始修复所有编译错误。因此,在第一阶段你能做的越多,在第二阶段你就能避免越多的痛苦。

这个过程对我来说在一个相当大的项目中很有效,但我应该注意,第一阶段需要对 AS3 的结构有深入的了解。如果您是 AS3 新手,那么您可能需要尝试构建一些需要移植的功能。例如,如果您的遗留代码使用拖放目标,您将需要尝试在 AS3 中实现它,以了解您的代码必须如何在结构上进行更改。如果您随后考虑到这一点重构 AS2,那么最终的语法更改应该会顺利进行。

对我来说最大的陷阱是涉及大量附加、复制和移动影片剪辑、改变其深度等的部分。所有这些东西都不能真正重新架构为看起来像 AS3;你必须将它们全部融入新的思维方式中,然后开始修复错误。

最后一点 - 我真的不会担心导入和覆盖语句之类的东西,至少不会担心自动化。如果你错过了任何一个,它会被编译器捕获。但如果你忽略了结构性问题,你就会遭受更多痛苦。

从 as2 迁移这样一个更大的项目将不仅仅是简单的搜索和替换。新的语法非常相似并且易于适应(如 lilserf 提到的),但如果没有别的,as3 更严格的事实和新的事件模型很可能会导致很多问题。如果您或多或少地从头开始重写几乎所有内容,可能会使用旧代码作为指导,那么您的情况可能会更好。

就知识而言,从 as2 迁移到 as3 相当简单。如果您了解面向对象的 as2,那么转向 as3 根本不是问题。

除非您特别想要,否则您仍然不必在 UI 中使用 mxml。Mxml 只是提供了一种快速构建 UI(等)的方法,但如果您想使用 ActionScript 自己完成,没有什么可以阻止您(如果您已经在 as2 代码中拥有该 UI,这也可能会更容易)。Flex (Builder) 只是一种快速完成您可能不想自己做的事情的方法,例如构建 UI 和绑定数据,但本质上它只是为您创建 .swf 的一部分 - 它没有什么魔力;)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top