What is the best approach to moving a preexisting project from Flash 7/AS2 to Flex/AS3?我有一个针对Flash 7的大型代码库,其中包含许多AS2类。 我希望我能够将Flex用于任何新项目,但是我们路线图中的许多新内容是对旧代码的补充。 AS2和AS3的语法通常是相同的,因此我开始怀疑将当前代码库移植到Flex / AS3会有多困难。 我知道所有与UI相关的东西都是虚幻的(当前,UI是在运行时生成的,其中包含很多createEmptyMovieClip()和attachMovie()东西),但是UI和控制器/模型的东西大部分是分开的。 有没有人尝试将AS2代码的大型代码库移植到AS3? 有多难? 您遇到了哪些陷阱? 对进行此类项目的方法有何建议? 我在尝试将大量的AS2类转换为AS3时遇到了一些值得注意的问题: 包裹命名
变成
需要进口 您必须显式导入使用的任何外部类-仅通过其完全限定名称来引用它们是不够的。 接口方法不能标记为"公共" 这完全有道理,但是AS2将允许您这样做,如果有任何需要删除它们。 明确的"覆盖"关键字 覆盖父类函数的所有函数都必须使用override关键字声明,就像C#一样。同样,如果您具有扩展其他接口并重新声明函数的接口,则必须删除这些覆盖(同样,对于public而言,这种表示法毫无意义,但AS2可以让您这样做)。 Flash的所有内置内容已更改 您在上面已经提到了这一点,但是现在它是flash.display.MovieClip,而不仅仅是MovieClip。此类别中有很多细节,我还远远没有找到所有这些细节,但是这里会引起很多烦恼。 结论 我并没有进行到成功的转换工作,但是我能够在短短的几个小时内编写一个快速的C#工具,该工具处理了其中的各个方面,但覆盖关键字除外。自动化导入可能很棘手-就我而言,我们使用的所有软件包均以一些根级别的软件包开始,因此易于检测。 我的经验是,迁移到AS3的最佳方法分两个阶段-第一个阶段是结构阶段,第二个是语法阶段。 首先,进行几轮重构,以保留在AS2中的位置,但要尽可能地接近AS3体系结构。自然地,这包括将所有框架脚本和#include脚本移动到包和类中,但是您可以做一些更细微的事情,例如更改所有事件侦听器和调度程序以遵循AS3流程(对事件类型使用静态类属性,并按方法进行注册而不是按对象)。您还将希望摆脱所有"内置"事件(例如onEnterFrame),并仔细研究鼠标的非平凡交互(例如拖动)和键盘交互(例如检测是否按下一个键)。此阶段可以逐步完成。 第二阶段是从AS2转换为AS3-将" _x"更改为" x",以及所有API,依此类推。这不能增量完成,您必须一口气完成尽可能多的工作,然后开始修复所有编译错误。因此,在第一阶段您可以做的越多,在第二阶段中避免的痛苦就越多。 这个过程对我来说是一个相当大的项目,但我应该注意,第一阶段需要对AS3的结构有深入的了解。如果您不熟悉AS3,则可能需要尝试构建一些需要移植的功能。例如,如果您的旧代码使用拖放目标,则需要尝试在AS3中实现该目标,以了解您的代码将如何在结构上进行更改。如果您随后牢记重构AS2,则最终语法更改应该会顺利进行。 对我来说,最大的陷阱是涉及许多附加,复制和移动MovieClip,更改其深度等等的部分。所有这些东西实际上都无法重组为AS3。您只需将所有内容融合到新的思维方式中,然后开始修复错误。 最后一点-我真的不会担心诸如import和override语句之类的事情,至少不必担心使其自动化。如果您错过了任何内容,它将被编译器捕获。但是,如果您错过了结构性问题,您将遭受更多痛苦。 以下是从AS2迁移到AS3的其他一些参考:
格兰特·斯金纳斯AS3工作坊入门幻灯片
Lee Brimelow:学习ActionScript 3的6个理由
Colin Moock:基本的ActionScript 3(被ActionScript开发人员视为"圣经"): 迈克·钱伯斯 mesh@adobe.com
首先,我希望您不要在项目中使用 我要做的一件事是逐项浏览Adobe的迁移指南(基本上只是已更改内容的逐项列出),并尝试找出是否可以通过简单的搜索和替换操作(可能使用正则表达式)还是手动编辑与AS3相对应的事件是否更容易。可能在很多情况下(尤其是,如您所说,如果要迁移的代码量很大),最好是编写更改脚本(即使用正则表达式搜索和替换)并手动修复所有边界情况,自动更改失败。 准备腾出时间进行一些调试,并通过一些测试用例运行。 另外,正如其他人已经提到的那样,尝试将AS2 SWF与AS3 SWF组合起来并不是一个好主意,甚至也不起作用,因此,您肯定必须一次将所有代码迁移到一个项目中。 从as2迁移这样的较大项目将不仅仅是简单的搜索和替换。新语法非常相似且易于修改(如lilserf所述),但是如果没有其他事实,那就是as3更严格,新事件模型很可能会引起很多问题。通过或多或少地从头重写几乎所有内容,可能会更好,最好使用旧代码作为指南。 从知识上从as2-> as3迁移非常简单。如果您知道面向对象的as2,那么转到as3根本不是问题。 除非您特别想要,否则您仍然不需要为您的UI使用mxml。 Mxml只是提供了一种构建UI(等)的快速方法,但是如果您想使用ActionScript自己做,则没有什么可以阻止您的(如果您已经在as2代码中包含该UI,这也可能会更容易)。 Flex(Builder)只是一种完成您可能不想做的事情的快速方法,例如构建UI和绑定数据,但本质上,它只是为您创建.swf的一部分-这没有魔力;) |