【Cocos2dx】手势识别

来源:互联网 发布:程序员的出路在哪里 编辑:程序博客网 时间:2024/05/27 01:11

Cocos2dx中没有附带滑动手势识别的函数,只提供四个触摸事件,一个是触摸开始、一个是触摸过程中、一个接触结束,还有一个是不怎么用的触摸被系统的电话打断。这在《【Cocos2dx】触摸事件》(点击打开链接)已经提到过了,这里不再赘述。然而,只是能够识别一个触摸按下动作而已,如果我要做到如下图一样的,识别用户的手势滑动方向这怎么做呢?


其实非常简单,首先,在头文件HelloWorldScene.h中声明该场景使用触摸事件,只使用到触摸开始与触摸结束的监听就可以了,然后用四个变量分别记录触摸开始的坐标与结束坐标:

#include "cocos2d.h"#include "math.h"//用到绝对值USING_NS_CC;class HelloWorld:public cocos2d::CCLayer{public:virtual bool init();static cocos2d::CCScene* scene();CREATE_FUNC(HelloWorld);private:float startX,startY,endX,endY;//记录触摸开始坐标与结束坐标CCLabelTTF *label;//文字  void ccTouchesBegan(CCSet *pTouches,CCEvent *pEvent);//开始触摸  void ccTouchesEnded(CCSet *pTouches,CCEvent *pEvent);//结束触摸 };

之后在主文件HelloWorldScene.cpp中触摸开始、触摸结束事件利用CCTouch获取其触摸开始与结束的坐标,之后如下图:


先求触摸开始、结束坐标的,X方向与Y方向之差,看哪个大,则认为是哪个方向上的偏移,这两个数肯定是有大小的,之后看偏移数值的正负,看偏移是向左向右。这里的偏移量利用fabs来求浮点数的绝对值。具体代码如下:

#include "HelloWorldScene.h"CCScene* HelloWorld::scene(){CCScene *scene = CCScene::create();HelloWorld *layer = HelloWorld::create();scene->addChild(layer);return scene;}bool HelloWorld::init(){CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize();//获取尺寸 label=CCLabelTTF::create("Please Touch!", "Arial", 24);//设定相应文本的位置  label->setPosition(ccp(visibleSize.width/2,visibleSize.height/2));//放在屏幕的中央this->addChild(label);    //声明这个场景是存在触摸事件的  this->setTouchEnabled(true);  return true;}//开始触摸  void HelloWorld::ccTouchesBegan(CCSet *pTouches,CCEvent *pEvent){CCTouch *touch=(CCTouch *)pTouches->anyObject();//记录开始坐标startX=touch->getLocation().x;startY=touch->getLocation().y;};//结束触摸void HelloWorld::ccTouchesEnded(CCSet *pTouches,CCEvent *pEvent){ CCTouch *touch=(CCTouch *)pTouches->anyObject();//记录结束坐标endX=touch->getLocation().x;endY=touch->getLocation().y;//求开始与结束坐标之差float offsetX=endX-startX;float offsetY=endY-startY;if(fabs(offsetX)>fabs(offsetY)){//根据X方向与Y方向的偏移量大小的判断if(offsetX>0){label->setString("Left!");}else{label->setString("Right!");}}else{if(offsetY>0){label->setString("Up!");}else{label->setString("Down!");}} };

当然,还可以进一步规定,两个方向上的偏移量大于一定程度才认为是一个触摸手势。

0 0