且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

《HTML5游戏编程核心技术与实战》一2.7 案例:《你画我猜》

更新时间:2021-07-04 18:17:26

本节书摘来异步社区《HTML5游戏编程核心技术与实战》一书中的第2章,第2.7节,作者: 向峰 责编: 杨海玲,更多章节内容可以访问云栖社区“异步社区”公众号查看。

2.7 案例:《你画我猜》

HTML5游戏编程核心技术与实战
在这一小节中,我们将利用前面介绍的知识,来创作一个《你画我猜》游戏中的主要功能。《你画我猜》是一款老少皆宜的多人在线的网络游戏,2012年风靡一时,玩法其实也来源于生活当中,经常在娱乐节目中出现。通常在节目中是这样玩的,主持人写出一个词语,然后由一个参与者根据这个词语画出相应的图案,由另一个参与者来根据这个图案猜出这个词语,而《你画我猜》就把现实生活中的这个玩法转到了电脑上,玩法就是这么简单。当然,本章还无法开始做出一个网络游戏,哪怕是一个简单的单机游戏,本书第10章有《你画我猜》这个游戏完整的实现,本章将会完成《你画我猜》中的画板部分。没玩过《你画我猜》游戏的,也应该用过Windows的画板吧?好了,下面我们来实现这个画板。

2.7.1 UI界面设计

首先,我们来设计一个画板的主页面,关于使用div布局游戏的UI不是本书的重点,我们只关注游戏逻辑的实现,以下代码只是一个参考实现:

《HTML5游戏编程核心技术与实战》一2.7 案例:《你画我猜》

设计好以上的主页面后,得到如图2-23所示的图,当然,样式部分不是重点,所以忽略,我们需要了解这个画板中和程序相关的部分。

好了,定义好图2-23所示的UI界面后,开始实现功能。

《HTML5游戏编程核心技术与实战》一2.7 案例:《你画我猜》

2.7.2 定义画板对象

首先,我们把整个画板看成一个画板对象,这个画板对象中有一些基本的属性,如画板的大小,当前画笔使用的颜色、宽度等,于是就有了以下的Paint类:

《HTML5游戏编程核心技术与实战》一2.7 案例:《你画我猜》

画板定义好了以后,我们需要逐渐往里面增加相应的功能代码。

2.7.3 初始化画笔选项区

接下来,我们需要动态产生颜色区域以及画笔区域,因为在前面设计UI的时候,只给这两个区域留下了空白容器,需要我们通过代码来产生。于是,可以给Painter定义一个初始化画笔的方法,具体的代码如下:

《HTML5游戏编程核心技术与实战》一2.7 案例:《你画我猜》

以上函数中,我们创建了颜色区域和画笔区域中的选择层部分,当用户鼠标点击颜色选择区域的时候,就会使用fire方法触发一个onPaintUpdate事件,修改当前用户画笔的颜色。同样,当用户鼠标点击画笔选择区域时,也会触发onPaintUpdate事件,修改当前用户画笔的大小。fire方法是Paint类中自定义的一个方法,用于处理画板中的各种自定义事件的触发,具体实现如下:

《HTML5游戏编程核心技术与实战》一2.7 案例:《你画我猜》

到此为止,关于画笔颜色和大小的选择已经完成,接下来,我们看看如何实现用户在画板上用画笔绘画。

2.7.4 实现画板绘制

使用画笔在画板上绘制,从原理上来说,canvas上是可以画图形的,所以我们只要在鼠标的移动事件上面做文章就可以了。鼠标在canvas上面移动的时候,可以跟踪当前鼠标的坐标,然后在这些坐标点上绘制点就可以了,这是我们最初的想法,但实际上这种效果并不理想。因为,首先,canvas并没有提供画点的方法,当然,可以通过绘制一个极小的矩形实现,但这不是主要问题。主要问题在于,虽然我们移动鼠标是连续移动,但电脑没有足够高的灵敏度捕捉鼠标的移动轨迹。事实上,如果采用这种方法,将会在canvas上留下断断续续的点的轨迹,这不是我们要的结果,我们需要的是把这些点用线连起来。所以最终的算法是,捕捉鼠标移动的坐标,然后把当前点和上一个点用线连接起来,最终,就可以达到一个比较好的效果。

根据以上的原理部分,我们在Paint类中增加一个initCanvas()方法,用于初始化画板,绑定鼠标在canvas上面的相关事件,其实现代码如下:

《HTML5游戏编程核心技术与实战》一2.7 案例:《你画我猜》

主要绘制部分的工作,基本都完成了。噢,别忘了,还有一个擦除区域。当我们绘制错误的时候,需要擦除图像,于是,我们可以完成初始化擦除区域的方法如下:

《HTML5游戏编程核心技术与实战》一2.7 案例:《你画我猜》

好了,大功告成,为了让Paint类开始工作,我们***写一个init()方法,完成以上全部的初始化工作,以便让用户方便使用,init()方法可参考完整代码部分。

2.7.5 整合代码

好了,整个Painter对象就完成了,最终,我们得到的Paint对象的完整代码如下:

《HTML5游戏编程核心技术与实战》一2.7 案例:《你画我猜》

至此,《你画我猜》的绘制部分已经完成,至于多人游戏的部分,在学习了后面的网络编程部分后,我们会得到一个完整的案例。