【Cocos2dx】手势识别

【Cocos2dx】手势识别,第1张

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

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!");		}	} };
当然,还可以进一步规定,两个方向上的偏移量大于一定程度才认为是一个触摸手势。 总结

以上是内存溢出为你收集整理的【Cocos2dx】手势识别全部内容,希望文章能够帮你解决【Cocos2dx】手势识别所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1074096.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-26
下一篇2022-05-26

发表评论

登录后才能评论

评论列表(0条)

    保存