前言
前段时间突然想尝试下小游戏,经过2天的翻阅各种游戏框架评测和根据自己的情况,决定首先尝试下阿里的HiloJS。因为之前没做过小游戏,看了Hilo的文档也是云里雾里,似懂非懂,真正做起来肯定不是自己想的那样,还是得玩一下才行呐。风靡一时的小恐龙游戏是一个很好的练手小游戏,于是决定实现Hilo版的小恐龙。
开始准备
万事开头难,没有游戏经验的我只能是看着好玩,但又不知如何下手。
我一点也不着急看API文档,因为看了于我也没啥用啊。于是先从教程文档入手。
快速开始
1 | 游戏开发过程: |
噢!游戏就是这么回事,在一个舞台上,创建一个或多个可视对象,定时的监听可视对象行为来进行事件交互。
嗯~看个栗子来学习下吧~于是来仔细研究Hilo官方提供的Flappy Bird。
勤勤恳恳的学习独立版Flappy Bird【官网传送门】。
通读完Flappy Bird还是有很多收获的(项目目录结构,游戏逻辑实现等,这些官网资料介绍很详细,建议自己结合源码多读几遍),但是由于对HiloJS API还不熟悉,需要一个类似hello world版本的API入门deomo,来熟悉如何使用。
请看下面的栗子:
1 |
|
小恐龙游戏
小恐龙游戏过程
前期准备就绪,开始你的表演(shou nue)了。
目录结构
参考flappy bird可以把小恐龙游戏也划分几大类:
1.Asset.js 静态资源类,存储各类静态资源-只有一张sprite图
2.Trex.js 小恐龙类,记录小恐龙的行为
3.Holdbacks.js 障碍物类,记录障碍物
4.background.js 地面背景-实际简化在game.js了
5.game.js 记录主游戏过程
游戏状态:ready 准备开始playing 进行中over 结束
起跳运动
小恐龙上跳过程可以看作是一个竖直上抛运动,根据位移公式可以得到上抛的高度。
根据位移公式:
1
2
3
4
5
6// 飞行时间
var time = (+new Date()) - this.flyStartTime;
// 飞行距离 - 根据竖直上抛运动位移计算公式
var distance = this.initVelocity * time - 0.5 * this.gravity * time * time;
// y轴坐标
var y = this.flyStartY - distance;
地面无缝缓动
通过观察图片,前600px基本直线,通过代码拼接600px形成对称,在循环运动来就可以达到无缝连接。利用HiloJS的Container类,将ground1和ground2合成一个ground,合并运动,这样避免单独设置缓动。

代码实现如下:
1 | // 地面 |
效果图:
小恐龙动画
游戏状态:ready 准备开始playing 进行中over 结束
根据游戏状态有3种,小恐龙的变化也有3种,第一个是准备状态,第二个是走路状态,第三个是碰撞时瞳孔睁大状态。如何在Trex类中实现这3种状态的变化呢?

可以使用动画精灵类Sprite。将用到的sprite图放到TextureAtlas(TextureAtlas纹理集是将许多小的纹理图片整合到一起的一张大图。这个类可根据一个纹理集数据读取纹理小图、精灵动画等。)
1 | this.trexAtlas = new Hilo.TextureAtlas({ |
然后再根据游戏状态进行添加到游戏场景中
1 | // 添加trexRuning sprite,从index为0开始添加。 |
需要注意的是,添加时如果后面sprite数<前面的,则会在保留后面的帧。如果你想覆盖就再加一帧。
碰撞检测
HiloJS有检测指定对象是否相交的方法,能够很方便用于碰撞检测。1
2// 检测object参数指定的对象是否与其相交。
hitTestObject(object:View, usePolyCollision:Boolean)
1 | // 障碍物类中-碰撞检测 |
监测碰撞时还有个问题需要注意:注意碰撞的区域,可以通过设置boundsArea进行人工描边碰撞体。
1 | // 可视对象的区域顶点数组。格式为:[{x:10, y:10}, {x:20, y:20}] |
恐龙动画
游戏声效
恐龙上跳和游戏失败的声效采用Hilo中WebSound实现,Hilo还有HTMLAudio、WebAudio模块,大家可以查看api按需使用。
1 | var audio = WebSound.getAudio({ |
小结
- Hilo版小恐龙游戏实现了大部分功能(除了记分和多种障碍物),已经可以简单的玩起来了。因为已经达到我熟悉HiloJS的初衷,所以没有继续再完善。有兴趣的可以自己完善。
- 游戏规划,思考运动技巧-比如无缝连接的方式,方式有多种,如何实现才简洁明了。
- Hilo库的api的使用讲解不太明确,有时需要查看源码来理解用法。
本文的Hilo-trex源码地址:https://github.com/sela0629/Hilo_project





























