egret 是国内的一款优秀的开发游戏开发引擎,去年的时候曾经了解过,作过一个简单的demo,而后就不了了之了,由于实际工做是用不到的。html
可是,近来工做中拿到别人拿给我看到的H5案例,很酷很炫的那种,一看源码,全是egret之类的游戏引擎来作的。其实不难理解,这类引擎都是经过canvas绘制界面,性能必然比DOM要好。试想一下这样的页面若是用DOM来作,恐怕作完以后也是卡顿的不要不要的:前端
本文只介绍最简单的egret,不是教程,具体的教程、API等参见手册。程序员
我以为egret和其余游戏引擎相比最强大的就是它的工具流,有设计师用的,有开发用的,包罗万象。能够在官网找到。github
Egret Engine: egret游戏引擎,包括 Game、Tween、EUI、粒子系统等扩展库typescript
Egret Wing: egret的IDE,能够自动构建、发布json
Res Depot: egret的资源管理工具,若是不用它,你必定会很头大canvas
Texture Merger: 能够合并纹理集,后面会说到api
Egret Inspector: Chrome 调试工具网络
通常来讲,使用上面的工具就能够开始开发咱们的小游戏了。
其余几个工具可用可不用。
egret并非用的JS,而是TypeScript。TS是JS的超集,总体感受很像Java,听说对C#程序员很友好。
class P2 extends egret.Sprite{ private man: Man; static initX = -830; public constructor(){ super(); } }
TS国内资料比较少,这是我找到的一份中文手册:
不须要先学习TS才能使用egret,彻底能够边用egret边学习TS,毕竟TS里的不少东西是和JS同样的。
介绍完背景,就能够开始使用 egret 了。
使用Egret Wing新建一个项目 Hi,点击下一步
选择舞台宽度和高度以及适配方案,点击完成:
能够看到Hi项目的目录
src: 源代码目录,Main.ts
是入口文件
libs: 项目中使用的库
resource: 项目中使用的资源(图片、音乐等)
egretProperties.json: 项目配置文件
index.html: 项目入口
构建项目:项目-构建并运行,能够看到最简单的egret项目。
发布:项目-发布,正式包就在 bin-release
中
显示对象:可以参与渲染的对象,都继承自 DisplayObject
,Shape是最简单的显示对象
显示容器:显示对象的容器,继承自 DisplayObjectContainer
,Sprite是最简单的显示容器
关系以下:
DisplayObject |--- DisplayObjectContainer |--- Sprite |--- Stage 舞台 |--- Shape 矢量绘图 |--- Bitmap 位图 |--- TextField 文字
显示对象都必须addChild在显示容器中才可以被显示。这里是最简单的例子:
class Main extends egret.DisplayObjectContainer { public constructor() { super(); var obj = new egret.Shape; obj.graphics.beginFill(0x000000); obj.graphics.drawRect(0,0,100,100); obj.graphics.endFill(); obj.x = 100; obj.y = 100; this.addChild(obj); } }
游戏中常常须要知道两个物体是否接触,egret对于碰撞检测是很方便的。
var isHit = obj.hitTestPoint(x,y);
egret的事件机制与DOM相似,分为捕获阶段、目标阶段、冒泡阶段,也有自定义事件以及触发。
这个其实很好理解,再也不多说。
egret的动画系统也很方便:
egret.Tween.get(shp).to({ x: 40 },100)
表示100ms内把x移动到40
RES 是egret为开发者准备的一套功能完善的资源加载机制。开发者编写游戏时,无须关心资源加载的细节,只须要指定资源,而且在对应的位置中添加相应地执行代码便可。
在resource中,default.res.json
是资源配置文件:
resources: 资源
name
type
url
groups: 资源组
name
keys
不用手写,使用 ResDepot
工具便可轻松管理:
使用 b1_png
这张图的时候只要这样其余什么都不用管:
var b1 = new egret.Bitmap(RES.getRes('b1_png'))
var img = new egret.Bitmap; img.texture = RES.getRes('pic_name'); this.addChild(img);
getRes 返回的数据并非位图,而是内容数据,也就是位图纹理,对应 egret.Texture。须要设置位图的texture属性为 getRes 返回的数据,图片才能显示。
纹理集,其实就是CSS里的雪碧图。咱们能够经过 Texture Merger 轻松制做管理。
好比咱们能够用这样的图片:
能够『拼』成这样的动画:
实际上只要这样加载资源便可:
音乐的播放更加简单
var sound = RES.getRes('music_mp3'); var channel = sound.play()
egret的内容远远比上面的介绍多得多,还有粒子系统、龙骨骨骼引擎、3D系统、网络请求等等,能够制做出很是复杂、庞大的游戏。能够看 HTML游戏引擎深度测评 里对egret的介绍就知道如今egret可以作出什么样的游戏。
egret为游戏开发提供了完整的工具流,尤为是资源加载,我在开发的时候很舒服,只用关心游戏逻辑就行了。做为前端来讲,掌握egret也算是一个课外实践了。总之,好处多多,赶忙使用吧。
献上我使用egret花了3天时间边学边作的项目:
http://huodong.mobilem.360.cn/0422/index.html
个人博客,欢迎订阅
微博粉丝太少,求粉