egret-docs-master/Conversion/guide
guofei 4fe0162b34 fist commit 2024-06-19 13:32:32 +08:00
..
56b1ab9bc0ca0.png fist commit 2024-06-19 13:32:32 +08:00
56b1ab9f1566a.png fist commit 2024-06-19 13:32:32 +08:00
56b1ab98afb53.png fist commit 2024-06-19 13:32:32 +08:00
56b1ab98bdbdc.png fist commit 2024-06-19 13:32:32 +08:00
56b1ab98d19a8.png fist commit 2024-06-19 13:32:32 +08:00
56b1ab98dffc5.png fist commit 2024-06-19 13:32:32 +08:00
56b1ab98efc4a.png fist commit 2024-06-19 13:32:32 +08:00
56b1ab987e000.png fist commit 2024-06-19 13:32:32 +08:00
56b1ab989f694.png fist commit 2024-06-19 13:32:32 +08:00
56b1ab990bea9.png fist commit 2024-06-19 13:32:32 +08:00
56b1ab991d532.png fist commit 2024-06-19 13:32:32 +08:00
56b1ab992cda3.png fist commit 2024-06-19 13:32:32 +08:00
56b1ab993d585.png fist commit 2024-06-19 13:32:32 +08:00
56b1ab994d310.png fist commit 2024-06-19 13:32:32 +08:00
56b1ab9895aef.png fist commit 2024-06-19 13:32:32 +08:00
README.md fist commit 2024-06-19 13:32:32 +08:00

README.md

前面的文章介绍了Egret Conversion的界面示例项目的演示。本文将讲述新手如何开始使用工具更加详细的讲述工具的功能和细节在转换过程中的问题和解决办法。

在开始转换一个Flash的项目之前建议您先阅读EgretConversion FAQ文档,以了解本工具目前的可用范围。

接下来以转换工具自带的示例项目“连连看”为例,演示创建转换项目到最终执行的整个过程。

首先获取示例项目

在Egret Conversion工具中切换到“欢迎界面”页面选择“示例项目一连连看”工具立刻开始解压连连看项目到系统的文档文件夹下windows系统下解压后的项目路径为C:\Users***\Documents\project\LianLianKan我把这个项目拷贝到D盘下并重新命名为FlashGame以便路径更短便于下文的截图展示。接下来开始转换项目

1. 创建转换项目

点“新建转换项目”,在弹框中填入相应的参数如下:

名称EgretGame是指转换后的Egret项目名称这个可以取任何名字合法的文件夹名

项目路径选择刚才的FlashGame目录路径。

输出路径填入的是转换项目目录与转换相关的配置文件及转换后的Egret项目log等都保存在这个目录下。建议提前创建一个空的目录然后拷贝目录路径到输出路径在工作区中删除转换项目时可以选择删除整个目录因此要小心影响到不相关文件。

提示:输出路径支持中文路径。

FlashGame这个项目是flash builder项目在源项目类型中选择“FlashBuilder项目”。

源项目类型可以选择“FlashBuilder项目”、“FlashDevelop项目”、“Flash Professional项目”、“其他Flash项目”四个选项。根据自己的项目类型来选择正确的类型。工具根据项目类型来自动识别项目的目录结构。

不能自动识别的项目需要手动填入项目的代码路径、项目启动文件、资源路径。

填好配置后点确定按钮即开始创建转换项目。工具将在转换项目的目录下生成项目配置文件、日志文件夹、以及一个空的Egret项目。此时工具在后台进行以下一些操作

  1. 调用egret的命令来创建一个新的egret项目LianLianKan。

提示如果没有安装egret则无法创建项目现象就是在日志区没有任何输出信息工具卡在这里。

  1. 从工具的安装目录下copy启动文件EgretMain.ts、API转换配置表到到”输出目录/config“目录下。

  2. 从工具安装目录下copy文件LoadingUI.ts到”输出目录/LianLianKan/src/LoadingUI.ts“。

  3. copy类库与flash一一对应的ts类库到”输出目录/LianLianKan/src“下。

  4. 生成项目属性文件conversion.cts存储项目的配置信息。

如果成功创建了转换项目,在日志区有如下信息输出:

此时按钮”转换Flash项目“会高亮显示。

2. 转换项目

点按钮”转换Flash项目“工具在后台将执行以下步骤

源码转换:

1工具会根据一些好的语法转换规则和”输出路径/config“下的API映射关系转换as3源码到“输出路径/名称/src”目录下。

具体的源码转换步骤如下:

 1. 载入API转换配置分析配置表中的类信息

 2. 载入as3源码解析源码的语法结构类的继承关系基本类信息如类的成员名称类型信息等。

  1. 按照文件逐一进行类型检查、转换特殊语法结构、API名称变换最后把该文件的语法树打印成ts文件。

  1. copy并适当修改”输出路径\config\EgretMain.ts”文件到”输出路径\名称\src\EgretMain.ts”主要修改启动类的名称和Embed资源列表。

资源拷贝

自动copy Flash项目输出目录(如bin-debug)下的资源文件如png、xml、txt等文件到D:\ConversionOut\EgretGame\对应的目录下。

swf资源转换

转换Flash项目输出目录下的swf资源文件并生成对应的资源到

”输出路径\名称\resources\”对应的目录下

显示转换过程的统计信息

  1. 代码文件转换率,统计了代码文件个数,以及成功生成的文件个数。

如果有文件生成失败则会在文件转换信息面板下显示

  1. 源码转换错误

例如在LianLianKan.as中写了如下代码

则会在面板中有如下提示:

出现这种情况就要根据提示查看源代码是否有语法错误,或者用了很生僻的写法,目前工具还没有记录这种写法。

  1. 资源转换错误

遇到无法转换的swf文件可以根据log信息查看哪个资源转换出错。目前工具对低版本swf文件的支持可能有问题也缺少对视频等资源的支持。

可以采取的措施是暂时删除该类型资源或该swf文件等待后续工具版本对资源的更多支持。

  1. API转换率是指用了多少个API其中有API错误的个占比是多少详细信息在

API的问题一共分为4种

  1. 缺少类信息。有以下几种情况:

    情况一:文件转换失败,导致整个文件的结构信息都没有解析出来,其它代码中引用了这个文件的类或方法就会报缺少类信息错误。

    情况二用了第三方库swc工具解析的过程中无法得知swc中的类信息。如果是这种情况请把swc中的代码文件复制到项目的src目录下。

    情况三使用了未支持的flash类库比如AIR的一些类库或者flex的类库这种情况也会导致找不到类信息。

  2. 缺少属性信息。主要是因为没有解析到相关类里有这个属性名称。

  3. 没有实现的类。在API转换表(见附录)中填写了标志“是否转换实现”。

  4. 没有实现的属性。在API转换表中填写了标志“是否转换实现”。

3. 编译项目

在代码和资源转换完成之后,下一步是编译项目。当然前提是项目转换之后没有严重的错误。

点第二步“编译Egret项目”。此时编译的是Egret的项目了。

如果出现编译错误请参考提示说明,或者参见开发者中心的文档说明。在代码和资源转换完成之后,下一步是编译项目。当然前提是项目转换之后没有严重的错误。

点第二步“编译Egret项目”。此时编译的是Egret的项目了。

如果出现编译错误请参考提示说明,或者参见开发者中心的文档说明

4. 运行项目

点第三步“运行Egret项目”。

连连看小游戏在我的默认浏览器chrome上运行了。

注意本地项目都会运行在3000端口上 如果3000端口被占用请先kill掉占用程序再尝试启动项目。见“附1KILL 3000端口”。

5. 查看与调试

游戏运行起来之后可在浏览器中调试程序。建议用chrome启动游戏。

在chrome中右键菜单里选择“审查元素”打开相应的的js文件可以断点执行查看变量的内容等。

选择Egret标签页可以查看当前帧率可以定位到游戏中具体的对象上然后在右侧更改该对象的属性可实时生效。例如我找到右侧一个小格子对其旋转45度效果如下

附1KILL 3000端口

MAC下

打开终端sudo lsof -i :3000

sudo kill -9 xxxx

Windows下

先查询占用3000端口的pid

netstat ano | findstr 3000

杀掉进程:

Taskkill /pid xxxx /f