博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
cocos2d-x推断sprite点击
阅读量:5017 次
发布时间:2019-06-12

本文共 1400 字,大约阅读时间需要 4 分钟。

我们经常须要推断用户的点击操作是否落于某个sprite之上,进而让这个sprite做出响应。

可是假设我们通过继承CCSprite类来实现自己的Sprite类的时候,产生的视图尺寸会充满屏幕。多个Sprite在同一层的时候会发生重叠,导致我们通过回调函数传递进的touch点是相对于最上层Sprite来说的。

好在我们能够通过CCDirector::sharedDirector()->convertToGL(CCTouch* touch->locationInView());的方法来获得touch point的绝对坐标。

然后通过遍历屏幕上全部的sprite,依次检查落点来推断用户点击应该被哪个Sprite接受。

但事实上Cocos2d-x已经为我们提供了一个很方便的方法来推断用户点击了哪个Sprite。

假如在这里我们有一个MySprite继承了CCSprite,同一时候为了响应点击事件,我们还须要继承CCTargetedTouchDelegate。

后者这个类为我们提供了三个virtual的回调函数:

 
virtual bool ccTouchBegan(CCTouch* touch, CCEvent* event);
virtual void ccTouchMove(CCTouch* touch, CCEvent* event);
virtual void ccTouchEnded(CCTouch* touch, CCEvent* event);

这三个函数分别在用户“点击”。“点击拖动”,“抬起手指”的时候被调用。

当中ccTouchBegan函数的返回值是bool类型,其原因就是系统会依据该回调函数的返回值来推断点击消息是否已经传递给用户须要的Sprite。

详细点儿:假设该回调函数返回true,说明程序猿已经觉得须要接受到这个触摸消息的Sprite已经接收到了这个触摸消息。那么程序的触摸消息传递就会到此为止,仅仅在本层被使用(也会被本层的ccTouchMove,ccTouchEnded所使用)。假设返回false,说明这个触摸消息并没有传递到须要接受这个消息的Sprite中去。这时系统会将这个触摸消息传递到下一层Sprite。而且由这一层的ccTouchBegan来处理这个消息。

贴个演示样例代码:

bool MySprite::ccTouchBegan(cocos2d::CCTouch *touch, cocos2d::CCEvent *event){    if(containsTouchLocation(touch)){        cout<<"Touch:"<
getTag()<

当中containsTouchLocation是用户自己实现的:通过在该函数中获取position,并与传递进函数的touch作比較,推断用户的触摸操作是否落于该sprite区域之内。

假设落在该区域,则返回true。中断这个消息链。同一时候这个sprite会对应对应的ccTouchMove,ccTouchEnded

假设没有落在该区域,则返回false。而且将这个消息传递给下一层的sprite。

转载于:https://www.cnblogs.com/mqxnongmin/p/10640455.html

你可能感兴趣的文章
HIVE中的order by操作
查看>>
Centos下新建用户及修改用户目录
查看>>
iOS开发IPhone以及iPad尺寸汇总
查看>>
Spring Boot RestTemplate文件上传
查看>>
myBatis自动生成mapping,dao和model
查看>>
Android Serivce 高级篇AIDL讲解
查看>>
SpringBoot学习笔记(2):引入Spring Security
查看>>
图片加水印 PDF取缩略图
查看>>
bzoj 4180: 字符串计数
查看>>
安卓--布局设计-计算器
查看>>
Java重写《C经典100题》 --27
查看>>
ABP中的拦截器之EntityHistoryInterceptor
查看>>
【oracle】oracle数据库建立序列、使用序列实现主键自增
查看>>
使用SQLiteDatabase操作SQLite数据库第二种方法
查看>>
vue,一路走来(12)--父与子之间传参
查看>>
css3 选择器的比较(一) -- 以字符串开头
查看>>
实现交换两个变量值的第二种方法
查看>>
英语单词学习备忘转载
查看>>
【C++】单例模式详解
查看>>
文本框根据关键字异步搜索内容
查看>>