最近的游戏中刚巧要用到一点手势识别的功能,于是便在网上搜索了一下资源,又做了一些尝试,最终找到了满意的解决方案。
在这里,想和各位感兴趣的朋友们分享一下在调查过程中发现的一些优秀实用的识别库。
.有时最基础的东西已经足以满足需求:
1. 最传统而又实用的处理方式
最简单但又有效的方式,当然是直接实用cocos2d中所支持的两种模式:”CCTargetedTouchDelegate” && “CCStandardTouchDelegate”,通过自己来处理”touchBegan – touchMoved – touchEnded”中的逻辑,来实现手势的识别。
参考链接: http://www.cocos2d-iphone.org/wiki/doku.php/tips:touchdelegates
2. 传统方式的一种封装实现 – GestureDetection类 (作者: Metric)
Metric编写的GestureDetection类就是基于原始的”touchBegan – touchMoved – touchEnded”方式。该类中已经内置了手势:滑动 (上, 下, 左, 右), 正方形, 圆形, X形。
参考链接: http://www.cocos2d-iphone.org/forum/topic/2527
下面是我使用GestureDetection写的简单演示程序:
.在cocos2d中使用UIGestureRecognizer:
3. 在cocos2d中使用UIGestureRecognizer (1) – CCGestureRecognizer (作者:xemus)
xemus编写的CCGestureRecognizer类库实现了将UIGestureRecognizer和cocos2d进行整合,它让你可以在cocos2d中方便的使用UIGestureRecognizer来对内建手势进行识别。
但是在使用该类库前,需要对cocos2d的源码做出些微的修改(CCNode和CCLayer)。
参考链接: http://www.cocos2d-iphone.org/forum/topic/8929
4. 在cocos2d中使用UIGestureRecognizer (2) – SFGestureRecognizers (作者:Krzysztof Zabłock)
Krzysztof Zabłock创建的 SFGestureRecognizers类同样是将UIGestureRecognizer和cocos2d进行了结合,而且因为是通过category实现的,所以无需对cocos2d的源码进行修改。作者同时还提供了针对1.0,2.0,2.0 ARC三个版本的
演示程序。
参考链接: http://www.merowing.info/2012/03/using-gesturerecognizers-in-cocos2d/
参考链接: https://github.com/krzysztofzablocki/CCNode-SFGestureRecognizers
演示程序:
.如果你需要更加复杂的手势识别,请接着看下去:
5. $1单笔识别 – MCGestureRecognizer (作者:Malcom)
Malcom在2009编写的MCGestureRecognizer类库,是$1单笔识别算法($1 Unistroke Recognizer)的一个IOS平台实现。它内置了16种不同手势的识别,同时还可以简单的进行添加。
参考链接: http://depts.washington.edu/aimgroup/proj/dollar/
说实话这个类库已经很难找到源码了,之前作者提供的下载地址的网站已经倒掉了,我在网上一些很旧的项目中,很幸运的淘到了代码。然后对其做了一下修改让其在cocos2d框架中可以正常的编译运行。但是识别的结果很不理想(当让这可能是因为我并没有花很多时间在这个库上的原因) :
6. N Dollar单笔识别 – WTMGlyphRecognizer (作者:Brit Gardner)
Brit Gardner编写的 WTMGlyphRecognizer是N Dollar单笔识别算法( N Dollar Gesture Recognizer)的一个IOS平台实现。手势的模板以json格式保存。
另外还有可以用来查看和编辑新手势JSON文件的java小程序。
参考链接: http://lucalaiho.altervista.org/joomla/shape-editor
参考链接: https://github.com/britg/MultistrokeGestureRecognizer-iOS
这个演示程序中,我修改了一点类库的源码,并将原来的UIView的一套东西重新写了个CCLayer的实现方法:
所有的识别库必然都由着他自己优点和缺点,如何选择最有效的解决方案这就要根据自己的游戏需求来具体分析了^_^