Skip to content

Commit b59b08a

Browse files
committed
reset
1 parent 45f43a8 commit b59b08a

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

74 files changed

+1364
-0
lines changed
3.59 KB
Loading
4.52 KB
Loading

Conversion/ASCodeTool/README.md

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
“AS代码转换工具”可将as3件导出为egret项目ts代码。作为EgretConversion附属工具,可以在as3件有更改时,单独转换该as3件,而不用转换整个项目。
2+
3+
**如何使用“AS代码转换工具”单独转换as3件?**
4+
5+
点击工具栏的按钮“SWF转换工具”
6+
7+
![](56b1ac1e245c0.png)
8+
9+
打开AS代码转换面板:
10+
11+
![](56b1ac1e2e299.png)
12+
13+
具体操作:
14+
15+
1. 直接把as3文件或文件夹拖到面板中
16+
17+
2. 转换后的代码会在C:\Users\xxxx\Desktop\astemp中
18+
19+
3. 可以直接把代码拷贝到egret项目中直接使用(错误自己还是需要改的)

Conversion/SWFTool/56b1ac0cbd1f8.jpg

17.3 KB
Loading

Conversion/SWFTool/56b1ac0d06bb9.jpg

85.3 KB
Loading

Conversion/SWFTool/README.md

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
“SWF转换工具”可将swf文件导出为Egret项目可用的资源。作为Egret Conversion附属工具,可以在swf文件有更改时,单独转换该swf文件,而不用转换整个项目。要注意的是,“SWF转换工具”是为Egret定制的工具,转出的格式只能用于egret项目(需要三方库的支持),无法在其他h5项目中使用。
2+
3+
## 一、如何使用“SWF转换工具”单独转换swf文件?
4+
5+
点击工具栏的按钮“SWF转换工具”
6+
7+
![](56b1ac0cbd1f8.jpg)
8+
9+
打开SWFExporter面板:
10+
11+
![](56b1ac0d06bb9.jpg)
12+
13+
1:提示信息区
14+
15+
2:swf文件的导出位置
16+
17+
3:当前导出swf文件的进度信息
18+
19+
4:正在导出的swf文件全路径
20+
21+
以Flashbuilder项目为例:
22+
23+
从Flash项目的bin-debug或源码目录下拖入一个或多个swf文件到面板中,也可拖入目录。转换时在面板底部显示有转换的进度,当转换完成将显示“complete!”。
24+
25+
如果选择了一个转换项目,所有转换的swf都会生成资源到转换项目下的egret项目resource/swfres目录下。
26+
27+
如果没有选择任何转换项目,所有转换的swf都会生成到桌面上resource/swfres下。
28+
29+
## 二、怎样在 Egret 项目中使用生成的资源?
30+
31+
把生成到resource/swfres路径下的资源文件夹拷贝到egret项目的相应位置(resource下)。然后可以像在flash中写as3代码一样加载swf文件。
32+
33+
例如在as3中这样写:
34+
35+
```
36+
var url:String = "123.swf";
37+
var urlRequest:URLRequest = new URLRequest(url);
38+
var loader:Loader = new Loader();
39+
loader.load(urlRequest, null);
40+
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadComplete);
41+
```
42+
43+
在egret项目中这样写:
44+
45+
```
46+
var url:String = "123.swf";
47+
var urlRequest:egret.URLRequest = new egret.URLRequest(url);
48+
var loader:flash.Loader = new flash.Loader();
49+
loader.load(urlRequest,null);
50+
loader.contentLoaderInfo.addEventListener(egret.Event.COMPLETE,flash.bind(this.onLoadComplete,this),null);
51+
```
52+
53+
可以看到egret项目的typescript代码直接加载了swf格式的文件。
54+
55+
egret项目直接支持swf文件格式吗?答案是不支持。
56+
57+
而使用Egret Conversion转换生成的egret项目支持swf。这是因为EgretConversion在底层封装了swf文件格式,在代码层模拟了这一功能,请看下文讲解。
58+
59+
## 三、egret中是怎么实现载入swf的?
60+
61+
在flash中可以直接加载swf格式的文件,然后从文件中取到各种资源,而egret是不支持swf文件格式的。Egret Conversion通过转换操作,将flash项目的as3语法翻译为egret项目的ts语法,将swf文件解析为可为egret项目识别的资源格式,通过底层的封装最终可在代码层直接加载swf。要注意的是,这种加载swf并不是真的load了一个.swf文件,而是在底层载入了经过转换后的图片等文件。
62+
63+
## 四、支持swf资源的三方库
64+
65+
Egret Conversion转换的swf资源可在任意egret项目中使用,通过导入一个开源的三方库。
66+
67+
获得三方库:用EgretConversion转换任意一个flash项目(可以用示例项目),在生成的egret项目中,src/as3目录即是这个三方库文件。
68+
69+
将三方库拷贝到自己的egret项目相应路径下。

Conversion/debugger/56b1ac3f5904b.jpg

454 KB
Loading

Conversion/debugger/56b1ac402f21a.jpg

78.1 KB
Loading

Conversion/debugger/56b1ac409fa73.jpg

18.8 KB
Loading

Conversion/debugger/README.md

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
转换Flash项目只是第一步,用EgretConversion转换完项目并按照提示修改错误的语法,以保证项目可以通过编译,然后才能运行项目 。这里提供一些技巧以便于您能快速调试自己的项目。
2+
3+
1. 源项目只需转换一次,剩余的工作都在Egret项目端完成。
4+
5+
2. 做好项目备份。
6+
7+
EgretConversion不会修改源Flash项目的任何内容,但是每次转换操作会覆盖Egret项目的所有代码。因此如果在Egret端已经修复了很多错误,需要谨慎使用“转换按钮”。建议是转换过项目之后所有的改动在Egret端做,不要在Flash项目中继续修改as3代码。
8+
9+
3. Egret项目开发工具可以使用Egret Wing或者Webstorm或者visual studio。wing的断点调试功能很方便。
10+
11+
4. 在Chrome中调试Egret的程序,可以断点查看运行时变量值。
12+
13+
5. 给Chrome安装Egret Inspector插件(从Egret下载器里下载),可以直观的看到显示对象的层级关系,并可动态修改所选目标的属性值以查看效果。查看当前帧率也在这里:
14+
15+
![](56b1ac3f5904b.jpg)
16+
17+
6. 修改舞台背景色。舞台背景默认是黑色。
18+
19+
打开Egret项目launcher下的index.html文件,修改 background: #000000;字段
20+
21+
7. 设置横竖屏,如上。修改 <meta name="screen-orientation" content="portrait"/>
22+
23+
8. 以WebGL模式运行项目:(Filter等效果只有在WebGL模式下有效果)
24+
25+
打开Egret项目下launcher下的egret_loader.js,修改var rendererType = 0;变量为1。
26+
27+
9. 修改舞台默认大小。
28+
29+
打开Egret项目下launcher下的egret_loader.js,修改egret.StageDelegate.getInstance().setDesignSize(600,600);
30+
31+
10. 修改帧频
32+
33+
打开Egret项目下launcher下的egret_loader.js,修改stage.frameRate = 10;
34+
35+
要注意的是该值必须为可被60整除的数(10,15,20,30,60),否则在运行时会将60作为默认值。
36+
37+
![](56b1ac402f21a.jpg)
38+
39+
11. 更新老项目的库文件
40+
41+
EgretConversion升级之后,库文件(as3目录下的类库)会有所更新。创建新的转换项目会使用最新的库文件,对于之前的转换项目,需要把最新的库文件拷贝到项目中替换旧文件。也可以在自动检测到库更新后点“更新配置”自动更新。
42+
43+
![](56b1ac409fa73.jpg)
44+
45+
12. 更新老项目的引擎版本
46+
47+
本机升级Egret后,在命令行中cd到egret项目目录,执行egret upgrade升级项目,然后执行egret build -e编译项目。

Conversion/errorDeal/README.md

Lines changed: 201 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,201 @@
1+
### 一,工具基本功能报错
2+
3+
* 无法新建转换项目
4+
5+
新建转换项目时,工具没有反应,进入假死状态。这种情况下可能与本地没有配置好egret环境有关,参考[准备与安装](../../Conversion/installation/README.md)
6+
7+
* 项目转换后编译报错
8+
9+
首先确定本机当前所用的Egret版本为EgretConversion所要求的版本。如果低于所需最低版本,则要更新Egret([准备与安装](../../Conversion/installation/README.md))。
10+
11+
* 3000端口被占用,无法运行项目
12+
13+
egret本机项目运行在3000端口上,需要结束其他占用了3000端口的进程。参考“Getting Started”文档的“KILL3000端口”部分。
14+
15+
### 二,代码转换报错
16+
17+
* 类型转换报错
18+
19+
ts中任意类型转换报错,可在表达式前加<any>强转一下。
20+
21+
使用'as'操作符做类型转换时,如果要转为Class类型,会有一个编译报错:
22+
23+
“error TS2304: Cannot find name 'any'.”
24+
25+
例如从加载的swf中取链接类定义:
26+
27+
```
28+
var btnCls:Class = loaderInfo.applicationDomain.getDefinition("MyButton") as Class;
29+
```
30+
31+
转换之后的TS代码为:
32+
33+
```
34+
var btnCls:any = <any>as3.As3As(loaderInfo.applicationDomain.getDefinition ("MyButton"),any);
35+
```
36+
37+
这是因为ts中没有与Class对应的类类型,需要手动修改如下:
38+
39+
```
40+
var cls:any = <any>loaderInfo.applicationDomain.getDefinition ("MyButton");
41+
```
42+
43+
* 类型转换报错error TS2345
44+
45+
```
46+
private myFunc():void{
47+
var employees:Array<any>;
48+
var isManager:Function = function (element:any,index:number,arr:Array<any>):boolean
49+
{
50+
return true;
51+
};
52+
employees.filter(isManager);
53+
}
54+
```
55+
56+
编译时经常会报错: error TS2345: Argument of type 'Function' is not assignable to parameter of type '(value: any, index: number, array: any[]) => boolean'.
57+
58+
大部分情况下这是编译器的误报,可以忽略不管。也可以手动在右侧表达式前加<any>强转,再次编译就不会报类型强转的错误。
59+
60+
* 接口继承接口,类型判定需手动修改。
61+
62+
* 判断一个对象是否实现了某接口,需手动修改。
63+
64+
* 对于闭包,如果有嵌套的写法可能会转换失效,根据错误提示修改写法。
65+
66+
* 对于出现的API警告,有未实现的API请参考手册里“手动填充API”章节。
67+
68+
* namespace引起的转换错误
69+
70+
暂时不支持命名空间的语法规则,as3中的namespace在ts中被忽略,在as3的namesapce中定义的变量和方法视为public属性。因此要防止同名变量的冲突,例如在类MyClass.as中定义变量如下:
71+
72+
```
73+
public var nsvar1:int = 10;
74+
ns1 var nsvar1:int = 30;//ns1是我定义的命名空间
75+
```
76+
77+
在转换为ts代码之后为:
78+
79+
```
80+
public nsvar1:number = 10;
81+
public nsvar1:number = 30;//这里会与类变量冲突
82+
```
83+
84+
对于此冲突,目前需要手动修改,namespace写法在EgretConversion的后续版本中将会支持。
85+
86+
* 子类父类同名属性同名方法冲突
87+
88+
as3代码中子类可以override父类的方法,可以重新定义重名属性(改变属性的访问域private/public/protected),可以定义重名的static属性/方法。
89+
90+
对于同名的属性/方法,EgretConversion在转换之后,会重命名子类中的同名属性/方法,以与父类区分。
91+
92+
如以下基类与子类:
93+
94+
```
95+
public class BaseCls
96+
{
97+
public var myVar:int;
98+
public static var TYPE:String = "red";
99+
public function func():void{
100+
}
101+
public static function sfunc():void{
102+
}
103+
}
104+
```
105+
106+
```
107+
public class ExtendCls extends BaseCls
108+
{
109+
protected var myVar:int;//改变属性访问限制
110+
public static var TYPE:String = "red";//重定义static变量
111+
public override function func():void{//override函数
112+
}
113+
public static function sfunc():void{//重定义static函数
114+
}
115+
}
116+
```
117+
118+
看下转换后的ts代码:
119+
120+
```
121+
class ExtendCls extends BaseCls {
122+
protected myVar_ExtendCls:number = 0;//重命名
123+
public static TYPE_static_ExtendCls:string;//重命名
124+
public func() {
125+
}
126+
public static sfunc_static_ExtendCls() {//重命名
127+
}
128+
}
129+
ExtendCls.TYPE_static_ExtendCls = "red";
130+
```
131+
132+
133+
* get set方法在ts中不可调用super,需要手动修改。
134+
135+
如果在as3中子类重写了get 或set方法,转换后在ts端不会报错,但是子类无法获取父类的 get/set方法了。
136+
137+
例如父类中有get & set方法:
138+
139+
```
140+
private _age:number = 0;
141+
public get age():number{
142+
return this._age;
143+
}
144+
public set age(value:number){
145+
this._age = value;
146+
}
147+
```
148+
149+
子类中重写set:
150+
151+
```
152+
public override set age(value:number){
153+
….
154+
}
155+
```
156+
157+
子类中将无法访问 age的get方法。
158+
159+
EgretConversion转换as3项目后会重命名get set方法的方法名。如:
160+
161+
```
162+
protected set age_ExtendCls(value:number)
163+
```
164+
165+
三,资源转换报错
166+
167+
* 转换过程中有swf文件无法转换(卡死、闪退)
168+
169+
在转换swf资源时,如果卡在某个swf文件无法转换可能导致工具的崩溃、闪退、卡死等现象。一般是由于工具尚不支持的功能引起的。解决办法:可暂时通过删除该swf以跳过转换该资源。并将有问题文件提交给官方。有下列情形的可按照相应的办法解决:
170+
171+
a. avm1格式的swf,需要在fla中重新发布为avm2格式。
172+
173+
b. 有视频等尚不支持的资源类型,可以在fla中删除尚不支持的资源,重新发布swf。
174+
175+
* 转换过程死循环,重复转同一个swf文件
176+
177+
使用SwfExporter工具单独转有问题的swf。或者重启EgretConversion继续转换。
178+
179+
* swf有更改需要重新导出
180+
181+
已经转过的swf不会重新转换,如果原swf文件有改动,需删除已经转换出的资源文件夹(在resource\swfres目录下)。或者使用“swf转换工具”的功能拖入swf文件转换。
182+
183+
* 文本都是白色
184+
185+
升级egret到2.0.3之后的版本。
186+
187+
* 转换后动画播放不正确
188+
189+
是否用帧代码控制播放了,比如加个stop()。目前转换项目会忽略帧代码。
190+
191+
其他错误联系官方团队。
192+
193+
论坛热帖 [转换错误解决方案](http://bbs.egret.com/thread-10741-1-1.html)
194+
195+
----
196+
197+
EgretConversion联系方式:
198+
199+
官方QQ群:Egret Conversion VIP 249685517
200+
201+
官方论坛:[http://bbs.egret.com/forum.php?mod=forumdisplay&fid=70](http://bbs.egret.com/forum.php?mod=forumdisplay&fid=70)
Loading
Loading

0 commit comments

Comments
 (0)