Cocos2d-x学习笔记九-------->Touch事件处理机制

Touch事件处理机制
x引擎中提供了两种不同的触摸事件处理机制,分别是 CCStandardTouchDelegateCCTargetedTouchDelegate。通常处理 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被打断。
:在使用 CCTargetedTouchDelegateTouch事件处理过程时需要注意以下几点:
(1) CCTargetedTouchDelegate回调里的参数接收的不是 Touch事件的集合,而是单个的 Touch事件,x引擎在工作的每一帧里都会将多点触摸点拆散成单个的 Touch事件再进行回调。注意,这里已经清楚的说明了,将多个点的处理过程变为在同一帧内的多次单击处理过程。
(2)用户必须实现 ccTouchBegan函数,且如果某个用户按下消息需要继续跟踪,则 ccTouchBegan需要返回 true,如果返回 false则表示不再跟踪此点的 Touch事件,此触摸点上的 ccTouchMove等接口不会被调用
(3)用户注册 TargetTouchDelegate的时候可以设置 bSwallowstouches标识,若某个 TargetTouchDelegate将该标识设为 true,且需要处理某个 Touch事件,则调用到该 Delegate之后Cocos2d-x引擎不会将 Touch消息发送给其他的 TargetTouchDelegateStandardTouchDelegate
x引擎首先派发事件给 CCTargetedDelegate,再派发给 CCStandardTouchDelegate。对于相同类型的 TouchDelegate,则是根据注册的优先级来确定派发先后顺序,数值越小代表优先级越高。如果优先级一样,则按照注册的顺序派发事件,后注册TouchDelegate具有优先权。

例子:参考 TestCppClickAndMove


如果编译时报错
error C2061: 语法错误: 标识符“CCTouch”
解决办法:加入 cocos2d命名空间USING_NS_CC;

相关文章

    本文实践自 RayWenderlich、Ali Hafizji 的文章《...
Cocos-code-ide使用入门学习地点:杭州滨江邮箱:appdevzw@1...
第一次開始用手游引擎挺激动!!!进入正题。下载资源1:从C...
    Cocos2d-x是一款强大的基于OpenGLES的跨平台游戏开发...
1.  来源 QuickV3sample项目中的2048样例游戏,以及最近《...
   Cocos2d-x3.x已经支持使用CMake来进行构建了,这里尝试...