A闪的 BLOG 技术与人文
RC2同样是一次重要的升级。 本文首先对这三个亮点进行介绍。再扼要介绍部分改动。 增量编译 增量编译是用于开发调试迭代过程中实现零等待编译。即只编译修改或者新增的ts类源代码。 用法 增量编译的用法是:
egret quickbuild 增量编译使用与原先的标准编译(egret build)不同的两种编译方法,无法完全取代标准编译。 而且标准编译所支持的引擎编译、指定运行时等选项增量编译均不支持。 最佳实践 实际开发中最佳的开发流程是: 新导入项目或进行第三方模块配置后,用标准编译方法进行引擎编译(egret build -e) 开发调试迭代过程,进行增量编译(egret quickbuild) 发布项目(egret publish)前,再进行一次标准编译(egret build) 需要指定参数的编译方式也同样使用标准编译(如egret bulid -runtime native) 注意 需要注意的一点,就是增量编译的分析过程与标准编译不同,标准编译会分析每个ts类源代码中对其他ts类的引用,从文档类开始分析,因此项目中没有用到的类标准编译会忽略。 而增量编译完全忽略源代码ts类之间的引用关系,直接进行扁平式编译。 自动脏矩形 脏矩形只重绘屏幕发生改变的区域,这在Egret 1.5时代已经实现,但旧版脏矩形需要手(ren)工(rou)设置,对于复杂的游戏来说,用脏矩形优化过程无异于一场噩梦。 白鹭官方已经对这部分进行了大刀阔斧的改进,实现了自动脏矩形。 熟悉Flash的朋友都知道,这项技术已经在提升Flash Player性能上取得了巨大成功。今天白鹭的产品再次将其应用到旗舰产品Egret和Lark上。脏矩形的工作方式如下图所示:
红框封闭的区域是脏矩形,也就是说引擎运行时只需要渲染这部分。 自动脏矩形,不但可以极大的提高渲染性能,还能尽可能的节省设备电量。另外,当检测到屏幕刷新面积已经到临界点(大约占舞台面积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.js和egret.min.js,开发者只需在发布时将egret.js切换为egret.min.js即可。 坚持使用JS而不刁TS的开发者必然是资深玩家(官方仍然建议,开发Egret首选标准的TS语言),因此暂无太多说明,后期白鹭官方会根据开发者反映,推出相应的详细教程。 其他较小改动 其余功能都是较小的改动,在这里简要说明。 几何运算模块增强 Matrix增加了createBox和createGradientBox等一系列API。 其中使用createBox方法可以直接定义生成的矩阵的缩放、旋转和平移效果。 Point增加了interpolate和normalize等高级方法。 Rectangle也增加了union、intersection等更丰富的操作。 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 );