Touch事件处理机制
x引擎中提供了两种不同的触摸事件处理机制,分别是
CCStandardTouchDelegate和
CCTargetedTouchDelegate。通常处理
Touch事件的对象都是
CCLayer类型或者其子类型的层节点,
CCStandardTouchDelegate是层节点默认注册使用的
Touch事件处理机制,在使用
CCStandardTouchDelegate时所有的触摸事件都会以一个集合的形式提供给
Touch事件的回调函数,回调函数需要处理的是多个点的触摸信息。
CCStandardTouchdelegate包含以下四个回调函数:
virtual void ccTouchesBegan(CCSet *pTouches,CCEvent *pEvent):处理用户按下事件。
virtual void ccTouchesMoved(CCSet *pTouches,CCEvent *pEvent):处理触摸点移动事件。
virtual void ccTouchesEnded(CCSet *pTouches,CCEvent *pEvent):处理用户放开事件。
virtual void ccTouchesCancelled(CCSet *pTouches,CCEvent *pEvent):处理
Touch被打断事件,如来电话了。
如果想使用这种
CCLayer提供的默认
Touch事件处理方式,还要在
CCLayer初始化时设置一个开关:调用
setIsTouchEnable(true/false),
true表示开启
Touch事件,
false表示关闭事件处理功能。
CCTargetedTouchDelegate包含以下四个回调函数:
virtual bool ccTouchBegan(CCTouch *pTouch,CCEvent *pEvent):处理用户按下事件。
virtual void ccTouchMoved(CCTouch *pTouch,CCEvent *pEvent):处理触摸点移动事件。
virtual void ccTouchEnded(CCTouch *pTouch,CCEvent *pEvent):处理用户放开事件。
virtual void ccTouchCancelled(CCTouch *pTouch,CCEvent *pEvent):处理
Touch被打断。
注:在使用
CCTargetedTouchDelegate的
Touch事件处理过程时需要注意以下几点:
(1)
CCTargetedTouchDelegate回调里的参数接收的不是
Touch事件的集合,而是单个的
Touch事件,x引擎在工作的每一帧里都会将多点触摸点拆散成单个的
Touch事件再进行回调。注意,这里已经清楚的说明了,将多个点的处理过程变为在同一帧内的多次单击处理过程。
(2)用户必须实现
ccTouchBegan函数,且如果某个用户按下消息需要继续跟踪,则
ccTouchBegan需要返回
true,如果返回
false则表示不再跟踪此点的
Touch事件,此触摸点上的
ccTouchMove等接口不会被调用。
(3)用户在注册
TargetTouchDelegate的时候可以设置
bSwallowsTouches标识,若某个
TargetTouchDelegate将该标识设为
true,且需要处理某个
Touch事件,则调用到该
Delegate之后Cocos2d-x引擎不会将
Touch消息发送给其他的
TargetTouchDelegate和
StandardTouchDelegate。
x引擎首先派发事件给
CCTargetedDelegate,再派发给
CCStandardTouchDelegate。对于相同类型的
TouchDelegate,则是根据注册的优先级来确定派发先后顺序,数值越小代表优先级越高。如果优先级一样,则按照注册的顺序派发事件,后注册的
TouchDelegate具有优先权。
例子:参考
TestCpp的
ClickAndMove
如果编译时报错:
error C2061: 语法错误: 标识符“CCTouch”
解决办法:加入
cocos2d命名空间USING_NS_CC;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。