cocos2d-x中关于touch事件的响应



原作者:有缘人  来源:新浪微博 地址:http://blog.sina.com.cn/s/blog_6ac2c7260102vvdu.html

 

一、touch事件响应分为单点触摸响应和多点触摸响应。

    单点触摸响应需要重载的方法:

  virtual boolccTouchBegan(CCTouch *pTouch, CCEvent *pEvent);

  virtual voidccTouchMoved(CCTouch *pTouch, CCEvent *pEvent);

  virtual voidccTouchEnded(CCTouch *pTouch, CCEvent *pEvent);

  virtual voidccTouchCancelled(CCTouch *pTouch, CCEvent *pEvent);

    多点触摸需要重载的方法:

  virtual voidccTouchesBegan(CCSet *pTouches, CCEvent *pEvent);

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

  virtual voidccTouchesEnded(CCSet *pTouches, CCEvent *pEvent);

  virtual voidccTouchesCancelled(CCSet *pTouches, CCEvent *pEvent);

二、单点触摸本质上需要调用的方法,即设置touch的代理

 CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this,-129,true);

    多点触摸本质上需要调用的方法

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

所以,只要调用了以上方法,就可以实现触摸响应,就不再需要调用setTouchEnabled(true);

三、setTouchEnabled的方法实现

void CCLayer::setTouchEnabled(bool enabled)

{

    if (m_bTouchEnabled != enabled)

    {

        m_bTouchEnabled = enabled;

        if (m_bRunning)

        {

            if (enabled)

            {

                this->registerWithTouchDispatcher();

            }

            else

            {

                // have problems?

                CCDirector::sharedDirector()->getTouchDispatcher()->removeDelegate(this);

            }

        }

    }

}

这段代码最主要的一句this->registerWithTouchDispatcher();

这个方法中就是调用第二点中提到的两个delegate添加方法。

所以,咱们实现touch响应的话,需要重载 registerWithTouchDispatcher()方法,并在这个方法中添加实现

void HelloWorld::registerWithTouchDispatcher()

{

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

   //CDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this,-129,true);

}

由此,实现touch事件响应需要做的操作:

1.重载registerWithTouchDispatcher()并实现

2.setTouchEnabled(true);

3.重载touch或者touches系列方法

四、在CCLayer的registerWithTouchDispatcher()中有关于m_eTouchMode的判断,并且有setTouchMode()方法,参数有两种:kCCTouchesOneByOne和 kCCTouchesAllAtOnce,分别代表单点触摸和多点触摸

当touchMode为kCCTouchesOneByOne 时,调用的是addTargetedDelegate方法;当touchMode为kCCTouchesAllAtOnce时,调用的是addStandardDelegate方法

所以,“重载registerWithTouchDispatcher()并实现”可以由setTouchMode()方法来替换

 

 

时间: 2024-11-05 14:38:43

cocos2d-x中关于touch事件的响应的相关文章

javascript移动设备Web开发中对touch事件的封装实例_javascript技巧

在触屏设备上,一些比较基础的手势都需要通过对 touch 事件进行二次封装才能实现. zepto 是移动端上使用率比较高的一个类库,但是其 touch 模块模拟出来的一些事件存在一些兼容性问题,如 tap 事件在某些安卓设备上存在事件穿透的 bug,其他类型的事件也或多或少的存在一些兼容性问题. 于是乎,干脆自己动手对这些常用的手势事件进行了封装,由于没有太多真实的设备来进行测试,可能存在一些兼容性问题,下面的代码也只是在 iOS 7.Andorid 4 上的一些比较常见的浏览器中测试通过. t

iphone开发笔记——Cocos2d CCLayer中的touch

废话不多说,cocos2d 自带有两套协议 分别是CCTargetedTouchDelegate 和 CCStandardTouchDelegate 这两个都是处理touch inside 但是针对点不同, CCTargeted...这个协议针对单点触控,用户直接操作UITouch 而Standard 传入的是一个NSSet  里面是 当前屏幕触摸的每个触摸点的UITouch ,恩最多是十个吧..   那么 target的好处在哪里,standard 完全可以 解决掉所有情况才对吖. 其实不是这

Cocos2D-X入门(4)Touch 事件:移动精灵

在.h中声明: virtual void registerWithTouchDispatcher(void); virtual bool ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent); virtual void ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent); virtual void ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent); virtual voi

自定义View系列教程07--详解ViewGroup分发Touch事件

探索Android软键盘的疑难杂症 深入探讨Android异步精髓Handler 详解Android主流框架不可或缺的基石 站在源码的肩膀上全解Scroller工作机制 Android多分辨率适配框架(1)- 核心基础 Android多分辨率适配框架(2)- 原理剖析 Android多分辨率适配框架(3)- 使用指南 自定义View系列教程00–推翻自己和过往,重学自定义View 自定义View系列教程01–常用工具介绍 自定义View系列教程02–onMeasure源码详尽分析 自定义View

快速掌握Android开发中Touch事件分发机制

Touch事件分发中只有两个主角:ViewGroup和View.Activity的Touch事件事实上是调用它内部的ViewGroup的Touch事件,可以直接当成ViewGroup处理. View在ViewGroup内,ViewGroup也可以在其他ViewGroup内,这时候把内部的ViewGroup当成View来分析. ViewGroup的相关事件有三个:onInterceptTouchEvent.dispatchTouchEvent.onTouchEvent.View的相关事件只有两个:

iOS开发中Subview的事件响应以及获取subview的方法_IOS

Subview的事件响应 在view的层级里面,默认情况下subview是可以显示到其父view的frame区域以外的,通过设置clipToBounds属性为YES,可以限制subview的显示区域.但是touch在各个UIView中传递的时候,区域时限制在view的frame内,此处包含两个信息:1.在当前view的frame以外所做的操作是不会传递到该view中的,这一点很容易理解.2.如果touch事件是发生在当前view的frame以外,该view所有的subview将也不会再收到该消息

android-安卓中按钮点击事件无响应

问题描述 安卓中按钮点击事件无响应 我在xml中写了一个按钮,对这个按钮设置了setOnClickListener事件,运行时点击按钮没反应,小白一枚,特来请教 解决方案 Button2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent mIntent = new Intent(); mIntent.setClass(MainActivity.this, R

listview-android中自定义ListView的单击事件不响应

问题描述 android中自定义ListView的单击事件不响应 本人创建了自定义ListAdapter,但是每行的单击事件不响应,应该实现的是点击之后获取这行的一些内容然后在另外的Activity中用. public class MainActivity extends Activity { // ArrayList of type "Person". We are making not a list of string, sondern eine list of persons A

关于Cocos2dx 3.1中给Button增加一个touch事件监听的时候运行出错的问题

问题描述 关于Cocos2dx 3.1中给Button增加一个touch事件监听的时候运行出错的问题 Button *login = (Button *)widget->getChildByName("login"); login->addTouchEventListener(CC_CALLBACK_1(RegisterUI::OnClick, this)); 编译能过 但是运行的时候运行到 addTouchEventListener的时候就出错了 报错信息 0x0F6C3