Egret 2.0 RC2 版本发布详解

egret-engine-2.0-rc2-release-760x300

RC2同样是一次重要的升级。 本文首先对这三个亮点进行介绍。再扼要介绍部分改动。

增量编译

增量编译是用于开发调试迭代过程中实现零等待编译。即只编译修改或者新增的ts类源代码。
用法
增量编译的用法是:

egret quickbuild
增量编译使用与原先的标准编译(egret build)不同的两种编译方法,无法完全取代标准编译。 而且标准编译所支持的引擎编译、指定运行时等选项增量编译均不支持。
最佳实践
实际开发中最佳的开发流程是:
注意
需要注意的一点,就是增量编译的分析过程与标准编译不同,标准编译会分析每个ts类源代码中对其他ts类的引用,从文档类开始分析,因此项目中没有用到的类标准编译会忽略。 而增量编译完全忽略源代码ts类之间的引用关系,直接进行扁平式编译。

自动脏矩形

脏矩形只重绘屏幕发生改变的区域,这在Egret 1.5时代已经实现,但旧版脏矩形需要手(ren)工(rou)设置,对于复杂的游戏来说,用脏矩形优化过程无异于一场噩梦。 白鹭官方已经对这部分进行了大刀阔斧的改进,实现了自动脏矩形。 熟悉Flash的朋友都知道,这项技术已经在提升Flash Player性能上取得了巨大成功。今天白鹭的产品再次将其应用到旗舰产品Egret和Lark上。脏矩形的工作方式如下图所示:

egret-frameRate-3inter egret-frameRate-2+1inter

红框封闭的区域是脏矩形,也就是说引擎运行时只需要渲染这部分。 自动脏矩形,不但可以极大的提高渲染性能,还能尽可能的节省设备电量。另外,当检测到屏幕刷新面积已经到临界点(大约占舞台面积95%)时,直接进入全屏刷新模式,因为这种情况脏矩形已经无法改善渲染性能了。

注意,由于加入该项功能对Egret内核有大规模的改动,稳定性有待进一步验证。因此并没有在RC2以一键安装方式提供,以防止产品级开发出现意外的问题。白鹭官方考虑到让广大喜欢尝鲜的开发者来体验,在github上提供了专门的渲染架构体验分支

动态帧频

由于官方推荐保持60fps,2.0 RC2之前漫长的时期,设定帧频还需要用一种类似hack的方法(具体官方FAQ有说明)。 在2.0 RC2版本,frameRate 再度回归!通过在程序中可以访问stage的位置使用stage.frameRate 即可以直接设置帧频,并且可以随时改变。 目前的版本帧频设置有个限制,只能设置被60整除的帧频,其他数值将会被拟合为符合这个标准的值。

创建JS项目

广大JS资深开发者期盼的JS创建项目的方式,其实在RC1已经提供,但有些小bug,在本次发布的RC2已经在不同的操作系统可正常使用。 创建项目使用:

egret create_js HelloJS
启动项目使用:

egret startserver HelloJS
在项目创建时,我们提供了egret.jsegret.min.js,开发者只需在发布时将egret.js切换为egret.min.js即可。 坚持使用JS而不刁TS的开发者必然是资深玩家(官方仍然建议,开发Egret首选标准的TS语言),因此暂无太多说明,后期白鹭官方会根据开发者反映,推出相应的详细教程。

其他较小改动

其余功能都是较小的改动,在这里简要说明。
几何运算模块增强
Matrix增加了createBoxcreateGradientBox等一系列API。 其中使用createBox方法可以直接定义生成的矩阵的缩放、旋转和平移效果。 Point增加了interpolatenormalize等高级方法。 Rectangle也增加了unionintersection等更丰富的操作。
DragonBones事件派发机制
之前的DragonBones采用自身独立的一套事件机制,从这个版本起,已经跟Egret内核统一,使用Egret内核提供的事件机制。 比如侦听Armature的事件,在升级到2.0 RC2之后需要添加第三个作用域参数(通常是this)。

var factory = new dragonBones.EgretFactory();
var armature = factory.buildArmature("warrior");
armature.addEventListener( dragonBones.ArmatureEvent.Z_ORDER_UPDATED
	, this.zUpdateHandler
	, this  );