首页 / 知识
将现有项目从Flash 7 / AS2迁移到Flex / AS3的最佳方法是什么?
2023-04-14 08:20:00

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的一部分-这没有魔力;) |
最新内容
相关内容
linux使用命令的方法?
linux使用命令的方法?,系统,信息,工具,标准,数据,命令,左下角,目录,文件夹,图标,linux的cd命令的使用方法1、cd ~:回到用户家目录。注:这得看你linux命令创建项目组?
linux命令创建项目组?,管理,密码,项目,命令,系统,位置,文件,用户组,用户,文件夹,linux命令中用root用户新建一个user1用户,新建一个group1的组复制项目的linux命令?
复制项目的linux命令?,系统,项目,文件,命令,目录,源文件,语法,选项,目标,功能,在Linux操作系统中复制文件或目录时使用的命令是()。1、在Linuxlinux命令项目部署?
linux命令项目部署?,项目,服务,环境,软件,系统,代理,管理,统一,做好,业务,怎么把php部署到apache服务器上linux?1、在linux部署php项目的方法:linux部署项目的命令?
linux部署项目的命令?,项目,系统,设备,环境,工作,基础,传播,信息,标准,代码,Linux部署springBoot项目并且查看控制台日志指定路径:如下: /data/wlinux项目常用命令?
linux项目常用命令?,工作,地址,系统,信息,管理,项目,命令,目录,标准,网络,linux常用的20个命令系统管理相关命令:df、top、free、quota、at、lplinux项目更新命令?
linux项目更新命令?,系统,信息,网络,地址,网站,通信,管理,时间,项目,命令,linux必学的60条命令是什么?压缩和解压缩:tar:打包或解包文件。gzip:压启动项目命令linux?
启动项目命令linux?,工作,经理,产品,技术,地址,数字,系统,项目,命令,信息,怎么在linux启动的时候执行一个命令?1、在启动时执行 Linux 脚本 有linux编译项目的命令?
linux编译项目的命令?,系统,工作,地址,软件,工具,信息,代码,项目,命令,环境,linux能否用命令行编译keil1、.编译软件用sdcc 2.sdcc不支持keil51c项目linux常用命令?
项目linux常用命令?,工作,地址,系统,管理,设备,信息,项目,命令,目录,标准,linux常用命令有哪些linux常用命令如下:查看内核版本:uname-a。控制台linux上部署项目命令?
linux上部署项目命令?,项目,软件,服务,工具,环境,代理,地址,代码,首页,做好,linux上利用pm2和nginx部署项目(3)linux上锁 flock (4) kill -- -$pgilinux创建项目命令?
linux创建项目命令?,名称,新增,项目,文件,命令,首次,工作,时间,文件夹,文件名,467/1000:linux中新建文件的命令有哪些1、“vi 文件名”命令,该