Egret EXP Release Note
===============================


最近更新时间：2015年7月30日


欢迎您使用Egret

## 概述

Egret EXP 社区体验版是Egret引擎的一个社区体验版本。

EXP 表示 experience （体验） 和 extreme performance （极限性能）

在这个版本中，我们主要聚焦于实现一套全新的渲染引擎，使游戏的渲染性能得到提升。

EXP 版本，重点解决了几个开发者反馈较普遍的痛点需求，如：

* 不规则遮罩
* Graphics 精确碰撞检测
* 精简入口逻辑

除此之外，EXP版本还解决了数个和 Flash 风格 API 调用行为不一致的问题

## 更新内容


本次更新内容汇总了从引擎 2.0 到 新版本的的改动


### 新增功能

* 自动脏矩形渲染，只有屏幕上的变化内容才会被重新渲染。

* DisplayObject 中 mask 同时支持 Rectangle 和 DisplayObject 类型参数

* 屏幕适配已支持旋转，并且可以指定横竖屏。
  在 ```index.html```中修改
  
  ```data-orientation="auto"``` 设置横竖屏，具体见 OrientationMode，
  
  ```data-content-width="480"``` 设置宽
  
  ```data-content-height="800"``` 设置高


* 由于 TypeScript 中不支持调用父类属性的方式，因此新增加api用来调用父类的属性的方式。
  
  egret.superSetter(this, "alpha", 1); 代替其他语言中的 super.alpha = 1;
  
  egret.superGetter(this, "alpha"); 代替其他语言中的 super.alpha

* 新增Bitmap smoothing属性，设置后图片会有平滑处理

* 新增Bitmap pixelHitTest属性，设置后图片支持像素点碰撞。



### 废弃接口

由于EXP版本的渲染引擎重构，以下 API 无法在新版本中支持。

* 废弃 DisplayObject 中 ```explicitWidth``` ```explicitHeight``` ```measuredHeight``` ```measuredWidth``` ```needDraw ```几个属性调用。
* 废弃 DisplayObject 中的相对锚点 ```anchorX``` ```anchorY```，如果想使用，请通过绝对锚点 ```anchorOffsetX``` ```anchorOffsetY``` 来实现。
* 废弃 DisplayObject 中 ```hitTest```方法，不再提供重写点击区域的判断，如果想调用点是否在DisplayObject内，请调用 hitTestPoint
* 不能对Stage进行以下设置 ```alpha```、```visible```、```x```、```y```、```scaleX```、```scaleY```、```rotation```、```cacheAsBitmap```、```scrollRect```、```filters```、```blendMode```、```touchEnabled```、```matrix```


除此之外我们废弃了一些不需要的和可以用其他方式实现的 API，保持 API 的精简。

* 废弃 Ticker 中 ```run``` ```setTimeScale``` ```getTimeScale``` ```pause``` ```resume``` 方法。
* 废弃 Event 中 ```ctrlKey``` ```altKey``` ```shiftKey``` 几个属性




### API 变化


#### Graphics 碰撞检测区域变化

##### 旧版本实现方式

完全矩形碰撞检测

##### 新版本实现方式

根据具体的graphics图形进行检测

##### 调整原因

旧版本实现不正确

##### TouchEvent.dispatchTouchEvent 参数调整

###### 旧版本参数

  
```
target:IEventDispatcher,
type:string,
touchPointID:number = 0, 
stageX:number = 0, 
stageY:number = 0, 
ctrlKey:boolean=false,
altKey:boolean=false,
shiftKey:boolean=false,
touchDown:boolean=false
```  


##### 新版本参数
  
```
target:IEventDispatcher, 
type:string, 
bubbles?:boolean, 
cancelable?:boolean, 
stageX?:number, 
stageY?:number, 
touchPointID?:number, 
touchDown:boolean = false

```

##### 调整原因

去掉 ```ctrlKey``` , ```altKey``` , ```shiftKey``` 这三个和移动设备无关的属性


#### TouchEvent.localX / TouchEvent.localY 返回结果变化

##### 旧版本行为

返回基于 ```TouchEvent.currentTarget``` 的 localX / localY

##### 新版本行为

返回基于 ```TouchEvent.target``` 的 localX / localY

##### 调整原因

旧版本和 Flash API 实现不一致。

#### 显示 FPS API 修改
  
##### 旧调用方式
调用 ```Profiler.getInstance().run()``` 来控制 FPS

##### 新调用方式
  在 ```index.html``` 中设置 ```data-show-fps="true"``` 显示FPS
  
  设置 ```data-show-fps-style="x:0,y:600,size:50,textColor:0xff0000"``` 修改FPS样式


##### 调整原因

通过把显示FPS参数移动到 ```index.html``` 文件中，开发者可以更方便的动态根据版本 / 用户 / 白名单的手段为自己游戏添加帧频，而无需重新修改编译代码


#### 屏幕适配策略调整

##### 旧版本实现

NO_SCALE 策略下，```stage.stageWidth ``` 和 ```stage.stageHeight ``` 永远不变
NO_BORDER 策略下，竖屏游戏 ```stage.stageWidth ``` 不会变化，```stage.stageHeight ``` 会变化，横屏游戏相反

##### 新版本实现

NO_SCALE 策略下，```stage.stageWidth ``` 和 ```stage.stageHeight ``` 会根据浏览器窗口显示范围而变化
NO_BORDER 策略下，竖屏游戏 ```stage.stageWidth ``` 和```stage.stageHeight ``` 不会变化，多出的部分会在显示范围外而被裁切
添加 FIXED_WIDTH 策略 和 FIXED_HEIGHT 策略，开发者如果之前使用了 NO_BORDER 策略，竖屏游戏请替换为 FIXED_WIDTH 策略，横屏游戏请替换为 FIXED_HEIGHT 策略

##### 调整原因

NO_SCALE 和 NO_BORDER 和 Flash API 不一致


##### 纹理缩放实现修改

##### 旧版本实现

修改 ```egret.MainContext.instance.rendererContext.texture_scale_factor``` 后，纹理和配置文件都需要进行修改

##### 新版本实现

修改 ```egret.MainContext.instance.rendererContext.texture_scale_factor``` 后，只需修改纹理，无需修改配置文件
允许通过在 ```index.html``` 中设置 ```texture-scale-factor="2"``` 修改

##### 调整原因

采用此种方法后，开发者只需要修改图片以及一个入口配置就可以实现纹理缩放功能。


#### 入口文件变化

##### 旧版本实现

在 ``` egret_loader.js ``` 中设置各种属性

根据一个 ```egret_file_list.js``` 和 ```game_file_list.js```设置加载内容

主 ```div``` 为 ```<div style="position:relative;" id="gameDiv"></div>```

##### 新版本实现

在 ``` index.html ``` 中设置各种属性

在构建后，在 ```index.html``` 生成需要加载的 js 文件的 script 标签

主 ```div``` 为 

```

<div id="egret-sample" style="margin: auto;width: 100%;height: 100%;" class="egret-player"
                        data-entry-class="Main"
                        data-scale-mode="showAll"
                        data-orientation="auto"
                        texture-scale-factor="1"
                        data-orientation="portrait"
                        data-content-width="480"
                        data-content-height="800"
                        data-show-paint-rect="false"
                        data-show-fps="true"
                        data-show-fps-style="x:0,y:0,size:24,textColor:0xffffff"
                        data-show-log="false" data-log-filter="">
                   </div>
           
```




##### 调整原因

精简入口逻辑。

由于改动较大，建议开发者在迁移老项目时，先创建一个新项目，然后把所有代码拷贝至新项目中。



#### 其他变化

* 容器的空白区域将不能点击。
* 多指触摸设置调用变化。由
  设置 TouchContext.maxTouches 变成
  设置 stage.maxTouches  默认值从2调整为99




#### 路线图
* 添加对 Egret Runtime 的支持
* 添加对 WebGL 的支持
* 添加滤镜功能

#### 注意
* 如果调用过引擎内部的方法或者属性，请自行查找最新对应的方法或者属性。
* 所有以  ```_``` 前缀的内部方法被调整为 ```$``` 前缀。
