再来一篇实例讲解(PS:该篇实例改编自Flash AS当中的一个鼠标手势库,具体出处我忘记了,这代码写的有点久了,好像2008年左右写的)。
鼠标手势是一个种比较好玩的东西,其应用并不算很广泛,但是研究起来相当好玩。在遨游浏览器当中,你可以看到鼠标手势的应用,例如你按住鼠标右键,然后画一个L,可以关闭当前的标签,从右向左画一横,可以后退,FireFox当中也支持鼠标手势。还有一些游戏中也用到了该技术,例如《三位一体》,还有NDS上的《恶魔城》等等。当然,手写输入发也算是一种鼠标手势,不过其实现方式不知道与我下面将的是否相同,这个没有研究过。
其实鼠标手势玩的就是算法,建立弧度向量表,根据鼠标轨迹的点计算方向,然后与预定义的鼠标手势进行对比,取出最相似的一组。这几个步骤当中都要用到不同的算法。
首先是弧度向量表,以八个方向的向量划分弧度,并按一定的精度建立一个弧度向量表,用0-7表示8个方向,-1表示“.”。如下图所示:
此时,我们就可以根据这个方向建立手势数据了,例如:
A可以表示为71
B可以表示为260123401234
I可以表示为2(与1没有区分开,程序带中的代码也是如此,如果需要区分开,可以用6表示1,即从下往上画一竖,不过这样不符合人们的输入习惯了)
看到这里,相信基本原理也大概明白了,就是预先建立手势数据,然后通过捕获鼠标轨迹的点来建立方向数组,然后与手势数据的数组进行对比。
接下来从流程上开始说(实例当中的流程):
1.捕获鼠标输入,当鼠标左键按下,开始进行鼠标轨迹记录。
2.以一定时间间隔记录鼠标移动过的点