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