`

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

阅读更多

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

 


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

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

  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);

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

  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的代理

 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系列方法

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

touchModekCCTouchesOneByOne 时,调用的是addTargetedDelegate方法;当touchModekCCTouchesAllAtOnce时,调用的是addStandardDelegate方法

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

 

 

欢迎关注关东升新浪微博@tony_关东升。

关注智捷课堂微信公共平台,了解最新技术文章、图书、教程信息

更多精品iOSCocos、移动设计课程请关注智捷课堂官方网站:http://www.zhijieketang.com

智捷课堂论坛网站:http://51work6.com/forum.php

 

 

 

  • 大小: 21.1 KB
分享到:
评论

相关推荐

    cocos2d-x TouchDemo

    首先,我们要理解cocos2d-x中的触摸事件处理机制。框架提供了一个事件管理器(EventDispatcher),它负责分发各种类型的游戏事件,包括触摸事件。触摸事件主要有三种:TOUCH_BEGAN(触摸开始)、TOUCH_MOVED(触摸移动...

    Cocos2D-X开发学习笔记-触屏事件使用示例

    本学习笔记将深入探讨如何在Cocos2D-X中处理触屏事件,让游戏能够响应用户的触摸操作。 首先,我们要了解Cocos2D-X中的触摸事件处理机制。在Cocos2D-X中,触屏事件主要通过`Touch`类和`TouchEvent`类来实现。`Touch...

    cocos2d-touch事件

    处理touch事件,我们需要先了解Cocos2d-x中的触摸事件类型: 1. `ccTouchesBegan`: 当用户首次触摸屏幕时触发。 2. `ccTouchesMoved`: 用户手指在屏幕上移动时持续触发。 3. `ccTouchesEnded`: 用户手指离开屏幕时...

    cocos2d-x-3.2文档

    首先,我们要了解Cocos2d-x中的事件分发系统。在3.0版本之后,事件处理不再直接在节点上进行,而是通过事件监听器(EventListener)和事件分发器(EventDispatcher)来完成。事件分发器负责接收和分发事件到相应的...

    cocos2d-x学习笔记(10)--touchEvent.rar

    本学习笔记将深入探讨cocos2d-x中的触摸事件处理机制,以及如何在项目中有效地利用它们。 首先,cocos2d-x是一个跨平台的2D游戏开发框架,它支持多种操作系统,包括iOS、Android、Windows等。在这些平台上,触摸...

    cocos2d-x demo笔记二

    "Demo2CreateSprite"这个名字暗示了我们将关注的是如何在cocos2d-x中创建和管理精灵(Sprite)。在2D游戏开发中,精灵是基本的视觉元素,通常代表游戏中的角色、道具或者背景。在cocos2d-x中,我们可以使用Sprite类...

    Cocos2D-X2.2.3学习笔记7(事件队列之触屏事件

    在本篇学习笔记中,我们将深入探讨Cocos2D-X中的事件队列以及如何处理触屏事件。 1. 事件处理系统 Cocos2D-X使用基于事件驱动的体系结构,这意味着它有一个事件队列来管理所有的用户输入和系统事件。当一个事件发生...

    cocos2d-x Box2d点击随机生成刚体

    2. **处理触摸事件**:在Cocos2d-x中,可以使用`ccTouchesBegan()`、`ccTouchesMoved()`和`ccTouchesEnded()`等方法来监听触摸事件。当用户点击屏幕时,触发生成刚体的逻辑。 ```cpp auto touchListener = ...

    Cocos2d-x 3.0开发-点击交互的四种处理.docx

    通过上述介绍,我们了解了Cocos2d-x 3.0中处理点击交互的四种方法:函数回调、重写Layer层的触控消息响应、3Listener以及TouchEvent回调。每种方法都有其适用场景和特点,开发者可以根据实际需求选择最合适的方式来...

    Cocos2d-x 自定义可接受处理触摸信息精灵类

    总结来说,这个例子展示了如何在Cocos2d-x中自定义精灵类来处理触摸事件。通过继承`CCSprite`并实现触摸事件回调函数,我们可以让精灵根据触摸状态执行不同的动作。同时,通过创建场景并设置触摸监听,我们确保了...

    cocos2d-x 中tiledmap中拖拽

    TiledMap是Cocos2d-x中的一个类,它基于开源的Tiled地图编辑器,允许开发者以直观的图形界面设计和编辑地图,然后导出为TMX格式的文件,供Cocos2d-x加载并渲染。TiledMap支持各种复杂的地图结构,如层、对象组、精灵...

    cocos2d-js实现单击、双击

    本文将深入探讨如何在cocos2d-js中实现单击和双击事件,这对于创建交互式游戏或者界面是至关重要的。 首先,我们要明白在cocos2d-js中处理用户输入主要是通过`Event`模块,特别是`cc.EventMouse`和`cc.EventTouch`...

    How to make a cocos2d-x simple game(第二部分)

    在Cocos2d-x中,`Sprite`类代表游戏中的可视对象,它可以是角色、背景或者其他任何静态或动态的图像。你可以通过添加动作(Actions)来控制它们的动画效果。 6. **添加节点到场景** 将创建的精灵添加到场景中,...

    cocos2d-xTest

    在cocos2d-x中,处理触摸事件通常通过继承`cc.EventListenerTouchOneByOne`或`cc.EventListenerTouchAllAtOnce`类来实现。`EventListenerTouchOneByOne`监听单个触点,而`EventListenerTouchAllAtOnce`则监听所有...

    如何用cocos2d-x来开发简单的Uphone游戏:(三)

    在Cocos2d-x中,碰撞检测可以通过多种方式实现,例如使用物理引擎、简单几何形状比较等。 ##### 2.1 简单几何形状比较 一种较为简单的实现方式是通过比较子弹与目标的矩形范围来进行碰撞检测。具体来说,可以计算...

    Cocos2d-x 3.0开发(三)点击交互的四种处理beta2版代码

    本教程将深入探讨在Cocos2d-x 3.0 Beta2版本中处理点击交互的四种方法,帮助开发者更好地理解并实现游戏或应用的用户界面。 1. **触摸事件监听器(TouchListener)** Cocos2d-x 提供了`EventListenerTouchOneByOne`...

    知易 Cocos2D-iPhone 游戏开发教程 004

    iPhoneOS为开发者提供了关于触摸(Touch)的一系列事件响应函数,这些函数允许开发者对用户的触摸行为作出响应。主要包括: 1. **touchesBegan:** 当用户手指首次触摸屏幕时触发。 2. **touchesMoved:** 当用户手指...

    Cocos2d-x3.0 四种点击交互处理Demo

    在Cocos2d-x 3.0中,更改了dispatch机制。同时加入了两种新的交互形式:listener 和touchEvent回调。加上先前版本中的点击函数回调,与重写layer层的touch消息响应,构成了一个相对完整的交互模式。本例运用四种方式...

    IOS应用源码之cocos2d-iphone-0.7.3.zip

    - **Touch handling**:cocos2d提供了触摸事件的处理机制,使得开发者能够轻松响应用户的触摸操作。 6. **动画系统** - **Sequence and Spawn**:通过组合动作来创建复杂的动画序列。 - **Tint and Fade**:改变...

    cocos2d-iphone之魔塔20层第四部分

    cocos2d-iphone通过触摸委托(Touch Delegate)机制处理用户的输入,比如玩家点击地图上的某个位置,角色应该移动到该位置。 5. **状态机设计**:魔塔游戏包含多个状态,如玩家移动、战斗、对话等。使用状态机设计...

Global site tag (gtag.js) - Google Analytics