Skip to content

Commit da11150

Browse files
author
Guoshaorui
committed
入口改变
1 parent d833b82 commit da11150

19 files changed

+816
-195
lines changed

egret/02-bitmap.md

Lines changed: 26 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -30,17 +30,28 @@ workspace // 您的工作目录
3030
然后我们创建一个TypeScript类文件,命名为Demo2.ts,然后把下面的代码粘贴进去:
3131

3232
```
33-
class Demo2 {
33+
class Demo2 extends egret.DisplayObjectContainer {
34+
/**构造函数*/
35+
public constructor() {
36+
super();
37+
this.addEventListener(egret.Event.ADDED_TO_STAGE,this.startGame,this);
38+
}
3439
/**游戏启动后,会自动执行此方法*/
3540
public startGame():void {
3641
alert("hello!");
3742
}
3843
}
39-
//create app
40-
var app = new Demo2();
4144
```
4245

43-
然后打开game_file_list.js,将"GameApp.js"修改为"Demo2.js",并注释掉GameApp.ts中的最后一行:```var app = new GameApp();```;这样就可以将我们自己的类作为入口类。
46+
然后打开game_file_list.js,将"GameApp"修改为"Demo2",并修改"GameApp.js"为"Demo2.js";这样就可以将我们自己的类作为入口类。
47+
48+
```
49+
var game_file_list = [
50+
"Demo2.js",
51+
"LoadingUI.js"
52+
]
53+
var document_class = "Demo2";
54+
```
4455

4556
使用命令行编译项目:
4657
```
@@ -59,7 +70,7 @@ egret build HelloEgret
5970
private logo:egret.Bitmap;
6071
```
6172

62-
要使用外部资源,就要引入加载机制。想想我们在Flash里是怎么做的?没错,用Loader或URLLoader。Egret中也提供了Loader的类似实现,即:RES.ResourceLoader。(注意ResourceLoader的命名空间是RES,而不是egret,这是因为Egret团队将资源管理从核心库中剥离出来单独作为一个库来维护)。但Egret的封装更“上层”一些,您甚至都无需直接接触ResourceLoader这个类,而是直接使用Egret提供的,结合外部配置文件的资源管理和加载方式。
73+
要使用外部资源,就要引入加载机制。想想我们在Flash里是怎么做的?没错,用Loader或URLLoader。Egret中也提供了Loader的类似实现,即:RES.ResourceLoader。(注意ResourceLoader的命名空间是RES,而不是egret)。但Egret的封装更“上层”一些,您甚至都无需直接接触ResourceLoader这个类,而是直接使用Egret提供的,结合外部配置文件的资源管理和加载方式。
6374

6475
首先打开项目目录下的resources/resource.json文件,这个您可以认为就是资源的配置文件,里面定义了resources目录下资源的名称和对应的url,甚至可以把资源划分成若干个group,这样来实现分批加载。
6576

@@ -108,32 +119,34 @@ stage.addChild(this.logo);//添加到显示列表
108119
完整代码:
109120

110121
```
111-
class Demo2 {
122+
class Demo2 extends egret.DisplayObjectContainer {
112123
113124
/**测试用的位图*/
114125
private logo:egret.Bitmap;
115126
127+
public constructor() {
128+
super();
129+
this.addEventListener(egret.Event.ADDED_TO_STAGE,this.startGame,this);
130+
}
131+
116132
/**游戏启动后,会自动执行此方法*/
117133
public startGame():void {
118134
this.loadResource();
119135
}
120136
/**加载所需资源*/
121-
public loadResource():void {
137+
private loadResource():void {
122138
//使用资源管理器加载资源
123139
RES.addEventListener(RES.ResourceEvent.GROUP_COMPLETE,this.onResourceLoadComplete,this);
124140
RES.loadConfig("resources/resource.json","resources/");
125141
RES.loadGroup("demo2");
126142
}
127143
/**加载完毕后即可使用*/
128-
private onResourceLoadComplete():void {
129-
var stage = egret.MainContext.instance.stage;//获取Stage引用
144+
private onResourceLoadComplete(event:RES.ResourceEvent):void {
130145
this.logo = new egret.Bitmap();//创建位图
131146
this.logo.texture = RES.getRes("egretIcon");//设置纹理
132-
stage.addChild(this.logo);//添加到显示列表
147+
this.addChild(this.logo);//添加到显示列表
133148
}
134149
}
135-
//create app
136-
var app = new Demo2();
137150
```
138151

139152
编译项目,顺利的话,您就能看到一个Egret的LOGO显示在屏幕上。
@@ -213,8 +226,7 @@ var bitmap = new egret.Bitmap();
213226
bitmap.texture = RES.getRes("icons.activity_10");//从精灵表中获取某一项
214227
bitmap.x = 100;
215228
bitmap.y = 100;
216-
var stage = egret.MainContext.instance.stage;//获取Stage引用
217-
stage.addChild(bitmap);
229+
this.addChild(bitmap);
218230
```
219231

220232
重新编译项目,检查效果吧。

egret/03-movieclip.md

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,7 @@ RES.loadGroup("demo3");
4343
var data = RES.getRes("monkey_json");//获取描述
4444
var texture = RES.getRes("monkey_png");//获取大图
4545
var monkey = new egret.MovieClip(data, texture);//创建电影剪辑
46-
var stage = egret.MainContext.instance.stage;//获取Stage引用
47-
stage.addChild(monkey);//添加到显示列表
46+
this.addChild(monkey);//添加到显示列表
4847
monkey.setInterval(1);//设置动画每帧的时间间隔,单位是毫秒,数值越小,动作越快
4948
monkey.gotoAndPlay("stand");
5049
```
@@ -53,7 +52,12 @@ monkey.gotoAndPlay("stand");
5352
完整代码:
5453

5554
```
56-
class Demo3 {
55+
class Demo3 extends egret.DisplayObjectContainer {
56+
57+
public constructor() {
58+
super();
59+
this.addEventListener(egret.Event.ADDED_TO_STAGE,this.startGame,this);
60+
}
5761
5862
/**游戏启动后,会自动执行此方法*/
5963
public startGame():void {
@@ -71,15 +75,11 @@ class Demo3 {
7175
var data = RES.getRes("monkey_json");//获取描述
7276
var texture = RES.getRes("monkey_png");//获取大图
7377
var monkey = new egret.MovieClip(data, texture);//创建电影剪辑
74-
var stage = egret.MainContext.instance.stage;//获取Stage引用
75-
stage.addChild(monkey);//添加到显示列表
78+
this.addChild(monkey);//添加到显示列表
7679
monkey.setInterval(1);//设置动画每帧的时间间隔,单位是毫秒,数值越小,动作越快
7780
monkey.gotoAndPlay("stand");
7881
}
7982
}
80-
81-
//create app
82-
var app = new Demo3();
8383
```
8484

8585
将Demo3作为入口类,重新编译项目,即可看到一只猴子的动画:

egret/04-text.md

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,7 @@ label1.y = 100;
2626
//支持旋转和斜切
2727
label1.rotation = 30;
2828
label1.skewX = 30;
29-
var stage = egret.MainContext.instance.stage;//获取Stage引用
30-
stage.addChild(label1);//添加到显示列表
29+
this.addChild(label1);//添加到显示列表
3130
```
3231
> 和所有基于WEB的应用一样,中文字体是个大问题,目前请尽量使用默认字体
3332
@@ -74,8 +73,7 @@ var spriteSheet:egret.BitmapTextSpriteSheet = RES.getRes("bitmapFont");
7473
var bitmap1 = new egret.BitmapText();
7574
bitmap1.spriteSheet = spriteSheet;
7675
bitmap1.text = "HelloWorld";
77-
var stage = egret.MainContext.instance.stage;//获取Stage引用
78-
stage.addChild(bitmap1);
76+
this.addChild(bitmap1);
7977
```
8078

8179
改写Demo4的代码,加入上述的语句,编译查看效果:
@@ -97,8 +95,7 @@ input.x = 120;
9795
input.y = 210;
9896
input.width = 400;
9997
input.height = 200;
100-
var stage = egret.MainContext.instance.stage;//获取Stage引用
101-
stage.addChild(input);
98+
this.addChild(input);
10299
input.setText("输入点文字吧");
103100
```
104101

egret/07-container.md

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,20 @@
11
Egret框架入门第一步 - 容器
22
===============
33

4-
Egret的显示列表机制,和原生Flash的显示列表机制是非常相似的,但也在某种程度上做了简化。比如显示对象容器,可以直接使用DisplayObjectContainer,而在Flash中,我们能使用的是DisplayObjectContainer的子类,比如Sprite和MovieClip,这一点上注意Egret和Flash的区别。
4+
Egret的显示列表机制,和原生Flash的显示列表机制是非常相似的,但也在某种程度上做了简化。比如显示对象容器,可以直接使用DisplayObjectContainer,而在Flash中,我们只能使用DisplayObjectContainer的子类,比如Sprite和MovieClip,这一点上注意Egret和Flash的区别。
55

66
至于显示列表的具体特性,可以看下面的代码片段:
77

88
```
99
//和Flash机制类似,stage是所有显示对象的'根',stage下面是一个树状的显示列表
1010
//同时Egret的显示列表相对于原生Flash也做了一些简化
11-
var stage = egret.MainContext.instance.stage;
1211
//显示对象容器,使用DisplayObjectContainer
1312
var container = new egret.DisplayObjectContainer();
1413
//容器的缩放,旋转,位移将影响到它下面的子节点(即包含的显示对象)
1514
container.scaleX = 0.2;
1615
container.scaleY = 0.2;
1716
//和Flash一样,用addChild方法把一个显示对象添加到显示列表
18-
stage.addChild(container);
17+
this.addChild(container);
1918
//位图是显示对象,纹理不是
2019
var bitmap1 = new egret.Bitmap(RES.getRes("egretIcon"));
2120
container.addChild(bitmap1);
@@ -36,6 +35,18 @@ DisplayObjectContainer.removeChildren
3635
```
3736
> 移除所有显示对象,一个方便使用的快捷方法
3837
38+
其实Egret也提供了Sprite类,用法:
39+
40+
```
41+
var sprite:egret.Sprite = new egret.Sprite();//Sprite与DisplayObjectContainer基本类似
42+
sprite.graphics.beginFill(0xFF0000,1);//区别是Sprite拥有graphics对象可用于画图
43+
sprite.graphics.drawRect(0,0,100,100);
44+
sprite.graphics.endFill();
45+
sprite.y = 300;
46+
this.addChild(sprite);
47+
```
48+
49+
如果容器不需要画图功能,我们可以直接用DisplayObjectContainer;需要画图的时候就用Sprite。
3950

4051
- - -
4152

egret/08-event.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ public constructor(type:string, bubbles:boolean = false, cancelable:boolean = fa
1717
```
1818
/**显示*/
1919
private onResourceLoadComplete():void {
20-
var stage = egret.MainContext.instance.stage;
2120
var container = new egret.DisplayObjectContainer();
2221
container.touchChildren = true;//等同于Flash的mouseChildren
2322
container.touchEnabled = true;//设置容器是否响应Touch交互
@@ -27,7 +26,7 @@ private onResourceLoadComplete():void {
2726
container.addChild(bitmap1);
2827
container.name = "myContainer";
2928
container.x = container.y = 100;
30-
stage.addChild(container);
29+
this.addChild(container);
3130
container.addEventListener(egret.TouchEvent.TOUCH_TAP,this.touchHandler,container);
3231
}
3332
/**事件侦听处理*/

egret/09-resource.md

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -69,13 +69,18 @@ egret.StageDelegate.getInstance().setDesignSize(480, 800, policy);
6969
一个典型的设置了屏幕策略的程序可能是如下的完整实例:
7070

7171
```
72-
class Demo9 {
72+
class Demo9 extends egret.DisplayObjectContainer{
7373
7474
/**加载进度界面*/
7575
private loadingView:LoadingUI;
7676
/**测试用的位图*/
7777
private logo:egret.Bitmap;
7878
79+
public constructor() {
80+
super();
81+
this.addEventListener(egret.Event.ADDED_TO_STAGE,this.startGame,this);
82+
}
83+
7984
/**游戏启动后,会自动执行此方法*/
8085
public startGame():void {
8186
//-------------------设置屏幕适配策略
@@ -101,25 +106,21 @@ class Demo9 {
101106
102107
//-------------------设置加载进度界面
103108
this.loadingView = new LoadingUI();
104-
this.loadingView.addToStage();
109+
this.stage.addChild(this.loadingView);
105110
}
106111
/**preload资源组加载进度*/
107112
private onResourceProgress(event:RES.ResourceEvent):void {
108-
this.loadingView.onProgress(event.itemsLoaded,event.itemsTotal);
113+
this.loadingView.setProgress(event.itemsLoaded,event.itemsTotal);
109114
}
110115
/**显示*/
111116
private onResourceLoadComplete():void {
112-
this.loadingView.removeFromStage();
113-
var stage = egret.MainContext.instance.stage;//获取Stage引用
117+
this.stage.removeChild(this.loadingView);
114118
this.logo = new egret.Bitmap();//创建位图
115119
this.logo.texture = RES.getRes("egretIcon");//设置纹理
116-
stage.addChild(this.logo);//添加到显示列表
120+
this.addChild(this.logo);//添加到显示列表
117121
}
118122
119123
}
120-
121-
//create app
122-
var app = new Demo9();
123124
```
124125

125126
- - -

egret/demo/HelloEgret/launcher/egret_loader.js

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -67,13 +67,31 @@ egret_h5.startGame = function () {
6767
context.deviceContext = new egret.HTML5DeviceContext();
6868
context.netContext = new egret.HTML5NetContext();
6969
context.stage = new egret.Stage(canvas.width, canvas.height);
70-
;
71-
egret.TextureCache.getInstance().prefix = "assets/480/";
70+
71+
//设置屏幕适配策略
72+
var container = new egret.EqualToFrame();
73+
var content = egret.Browser.getInstance().isMobile ? new egret.FixedWidth() : new egret.FixedSize(480, 800);
74+
var policy = new egret.ResolutionPolicy(container, content);
75+
egret.StageDelegate.getInstance().setDesignSize(480, 800, policy);
76+
7277
egret.RendererContext.CONTENT_SCALE_FACTOR = 1;
7378
context.run();
7479

75-
if (app && app.startGame) {
76-
app.startGame();
80+
var rootClass;
81+
if(document_class){
82+
rootClass = egret.getDefinitionByName(document_class);
83+
}
84+
if(rootClass) {
85+
var rootContainer = new rootClass();
86+
if(rootContainer instanceof egret.DisplayObject){
87+
context.stage.addChild(rootContainer);
88+
}
89+
else{
90+
throw new Error("文档类必须是egret.DisplayObjectContainer的子类!");
91+
}
92+
}
93+
else{
94+
throw new Error("找不到文档类!请在game_file_list.js指定文档类的完全限定名。");
7795
}
7896
}
7997

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
var console = {};
2+
console.log = function (message) {
3+
egtlog(message);
4+
}
5+
6+
7+
egret_native.egtMain = function () {
8+
require("bin-debug/lib/egret_file_list.js");
9+
require("bin-debug/src/game_file_list.js");
10+
for (var key in egret_file_list) {
11+
var src = "bin-debug/lib/" + egret_file_list[key];
12+
require(src);
13+
14+
}
15+
for (var key in game_file_list) {
16+
var src = "bin-debug/src/" + game_file_list[key];
17+
require(src);
18+
}
19+
20+
21+
var context = egret.MainContext.instance;
22+
context.rendererContext = new egret.NativeRendererContext();
23+
context.netContext = new egret.NativeNetContext();
24+
context.touchContext = new egret.NativeTouchContext();
25+
context.deviceContext = new egret.NativeDeviceContext();
26+
27+
egret_native.EGTView.setDesignSize(480, 800);
28+
context.stage = new egret.Stage(480, 800);
29+
egret.RendererContext.CONTENT_SCALE_FACTOR = 1;
30+
31+
context.run();
32+
33+
var rootClass;
34+
if(document_class){
35+
rootClass = egret.getDefinitionByName(document_class);
36+
}
37+
if(rootClass) {
38+
var rootContainer = new rootClass();
39+
if(rootContainer instanceof egret.DisplayObject){
40+
context.stage.addChild(rootContainer);
41+
}
42+
else{
43+
throw new Error("文档类必须是egret.DisplayObjectContainer的子类!");
44+
}
45+
}
46+
else{
47+
throw new Error("找不到文档类!请在game_file_list.js指定文档类的完全限定名。");
48+
}
49+
}

0 commit comments

Comments
 (0)