小for的Cocos2d-x学习笔记与感悟5之拖动(Touch)事件

今天索性再写一篇了,其实代码已经实现了,只是笔记还没整理,整好了去吃饭了!今天收获还是不小的。

额,前面搞忘了习惯性的加一句:

本文小for原创,转载请注明出处。

正文开始。

拖动(Touch)事件和点击事件的处理我非常相似的,想必看了小for第四篇笔记并且去搜索了其他文章看的童鞋们会发现,小for的文章里只实现了一个方法,而其他文章中却有四个方法。其实小for是都去实现了的,只是没写上去,其实每个方法的使用都是相同的。但是,今天却有学弟看了后觉得还是写全好些,那我就写全吧。^-^

首先,我们同样需要在HelloWorld中声明以下四个函数

 

         virtual void ccTouchesBegan(cocos2d::CCSet *pTouches,cocos2d::CCEvent *pEvent);


         virtual void ccTouchesEnded(cocos2d::CCSet *pTouches,cocos2d::CCEvent *pEvent);

 

         virtual void ccTouchesMoved (cocos2d::CCSet *pTouches, cocos2d::CCEvent *pEvent);

 

         virtual void ccTouchesCancelled(cocos2d::CCSet *pTouches, cocos2d::CCEvent *pEvent);


 

        

然后,在HelloWorld.cpp的init中注册

CCDirector::sharedDirector()->getTouchDispatcher()->addStandardDelegate(this, kCCMenuHandlerPriority);

最后,需要把上述四个方法的函数体写出来,简单记录下。ccTouchesBegan是点下去那一瞬间执行的内容,ccTouchesEnded是手指松开时执行的内容,ccTouchesMoved是滑动过程中执行的内容(这个方法一直在执行,且自动循环的),ccTouchesCancelled取消(代码中有介绍什么情况下算取消)时执行的内容。

这四个函数并一起,实现了点击屏幕上一个地方,图片spriteClick转移到点中的位置,按住不放滑动时该图片跟着鼠标走,鼠标松开后,图片回到原位置。

具体代码如下图,不多解释了,见代码

  

 void HelloWorld::ccTouchesBegan(cocos2d::CCSet *pTouches,cocos2d::CCEvent *pEvent){
	//得到点击的点
	CCTouch *pTouch = (CCTouch*)(pTouches->anyObject());
	CCPoint point=pTouch->locationInView();
	//这个点需要处理,上下不对,我的模拟器高度为320
	point.y=320-point.y;
	//设置锚点为正中
	//这里基本可以看出设置锚点的规则了,整体视为(1,1)这么大的
	spriteClick->setAnchorPoint(ccp(0.5,0.5));
	spriteClick->setPosition(point);
}
	
void HelloWorld:: ccTouchesEnded(cocos2d::CCSet *pTouches,cocos2d::CCEvent *pEvent){
	
	//结束后,我们再把它放回去吧
	spriteClick->setAnchorPoint(ccp(0,0));
	spriteClick->setPosition(ccp(0,0));
}

void HelloWorld::ccTouchesMoved(cocos2d::CCSet *pTouches, cocos2d::CCEvent *pEvent){
	CCTouch *pTouch = (CCTouch*)(pTouches->anyObject());
	CCPoint point=pTouch->locationInView();
	//同意地,这个点的纵坐标有问题
	point.y=320-point.y;
	CCLog("-----%f----%f",point.x,point.y);
	spriteClick->setAnchorPoint(ccp(0.5,0.5));
	spriteClick->setPosition(point);
}

void HelloWorld:: ccTouchesCancelled(cocos2d::CCSet *pTouches, cocos2d::CCEvent *pEvent){
	//什么情况取消呢?
	//比如弹出电量提示框、其他弹窗、电话之类的
}


附上模拟器囧照三张

1、 Begin

2、 Move

3、 End

 

4、 Cancle(小for也取消图了^-^)

 

 

又到吃饭的时候了,真是好啊!小for祝大家幸福安康,欢迎交流学习,批评指正哦!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值