2.x的触摸事件的版本号

触摸事件处理有2种子。以下单点触摸的样本。(另一种多点触摸屏)。

创建cocos2d 该项目。

1. 重写下面虚函数。

  bool ccTouchBegan(cocos2d::CCTouch* touch, cocos2d::CCEvent* event);
void ccTouchMoved(cocos2d::CCTouch* touch, cocos2d::CCEvent* event);
void ccTouchEnded(cocos2d::CCTouch* touch, cocos2d::CCEvent* event);

//注意不要和ccTouchesBegan函数混淆,这是多点触屏的响应事件。顾名思义。加了es。

  void onEnter(); 

  void onExit(); //这个函数是点击关闭button运行的函数,能够在里面加入有必要的代码,再退出之前。

,这里主要是退出前进行移除触屏事件。

//假设有学过MFC的话,这个函数就是类似于OnCancel()函数。

//以下就是简单地说明步骤。

2.然后为上面的函数加入内容。

void HelloWorld::onEnter()
{
CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this,0,false); //注冊事件
CCLayer::onEnter(); }
void HelloWorld::onExit()
{ CCDirector::sharedDirector()->getTouchDispatcher()->removeDelegate(this);
CCLayer::onExit();
}
bool HelloWorld::ccTouchBegan(CCTouch* touch, CCEvent* event)
{
CCLOG("ccTouchBegan"); //后台输出
return true;
}
void HelloWorld::ccTouchMoved(CCTouch* touch, CCEvent* event){
CCLOG("ccTouchMoved");
}
void HelloWorld::ccTouchEnded(CCTouch* touch, CCEvent* event)
{
CCLOG("ccTouchEnded");
}

这里笔者感概一下、

//有人说

//“正确的应该使用setTouchEnabled(true)来注冊事件,对于上面的注冊事件的代码的简化。会出现逻辑问题,并且造成控制触屏事件的操作性减低”

// 我说,不然。既然你使用了自己的方法去注冊事件,你就不是必需再次使用他们封装好的setTouchEnabled()函数。里面函数有他们的逻辑推断。(你能够

不断寻找到那个函数的内容看看的)。我们也有自己的逻辑推断。

所以不是正确与错的问题。而是你的游戏需求,需不须要。另外。我更喜欢懂其然,

知其理,还有我想说,这个cocos2d框架已经减低非常大的门槛了,把非常多底层的操作封装,所以不懂opengl和dx的人也能够上手,这里我想说。

对于不懂opengl和dx,还是有必要去加强基础。虽说。你不去学习。也没有什么大问题,可是非常多大问题通常是建立在细节上。

经过了上面2个步骤,简单实现了单点触屏事件的处理。

以下顺便也讲一下多点触屏事件的处理。

步骤差点儿相同。只是就是重写函数有点差别。

1.重写下面函数。

<pre name="code" class="cpp">virtual <span style="font-family: Arial, Helvetica, sans-serif;">void ccTouchesBegan(cocos2d::CCSet *pTouches, cocos2d::CCEvent *pEvent);</span>
virtual <span style="font-family: Arial, Helvetica, sans-serif;">void ccTouchesMoved(cocos2d::CCSet *pTouches, cocos2d::CCEvent *pEvent);</span>
virtual <span style="font-family: Arial, Helvetica, sans-serif;">void ccTouchesEnded(cocos2d::CCSet *pTouches, cocos2d::CCEvent *pEvent);</span>

virtual void onEnter();virtual void onExit();



2.为上面的函数加入内容。

void HelloWorld::onEnter()
{ CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, kCCMenuHandlerPriority -1,true); //这里和第一个有差别
CCLayer::onEnter();
}
void HelloWorld::onExit()
{ CCDirector::sharedDirector()->getTouchDispatcher()->removeDelegate(this);
CCLayer::onExit();
}

其它的3个事件响应内容自己写。笔者不再反复上面的了。

3.x版本号的触屏事件

谈到3.x版本号的cocos,这变化不是一般的大,各种处理方式都改变了,算了,你懂得,不谈他的变化有多大。下面是3.x版本号的触屏事件处理方式。

尽管是改变比較大,但处理方式和思维给开发人员一个非常方便的处理方式。3.x的版本号我认为规范性比2.x好了好多。下面直接给代码。不进行解析
多点触摸类似
//单点触摸
virtual bool onTouchBegan(Touch *touch, Event * pEvent);
virtual void onTouchMoved(Touch *touch, Event * pEvent);
virtual void onTouchEnded(Touch *touch, Event * pEvent);
virtual void onTouchCancelled(Touch *touch, Event * pEvent); auto dispatcher = Director::getInstance()->getEventDispatcher();
auto TouchListener = EventListenerTouchOneByOne::create();
TouchListener->onTouchBegan = CC_CALLBACK_2(HelloWorld::onTouchBegan,this);
TouchListener->onTouchMoved = CC_CALLBACK_2(HelloWorld::onTouchMoved,this);
TouchListener->onTouchEnded = CC_CALLBACK_2(HelloWorld::onTouchEnded,this);
TouchListener->onTouchCancelled = CC_CALLBACK_2(HelloWorld::onTouchCancelled,this);
TouchListener->setSwallowTouches(true);
dispatcher->addEventListenerWithSceneGraphPriority(TouchListener,this); bool HelloWorld::onTouchBegan(Touch *touch, Event * pEvent)
{
CCLOG("onTouchBegan");
return 1;
}
void HelloWorld::onTouchMoved(Touch *touch, Event * pEvent)
{
CCLOG("onTouchMoved");
}
void HelloWorld::onTouchEnded(Touch *touch, Event * pEvent)
{
CCLOG("onTouchEnded");
}
void HelloWorld::onTouchCancelled(Touch *touch, Event * pEvent)
{
CCLOG("onTouchCancelled");
}


cocos2d触摸事件处理机制(2.x和3.x变化)的更多相关文章

  1. Android 触摸事件处理机制

    Android 触摸事件的处理主要涉及到几个方法:onInterceptTouchEvent(), dipatchTouchEvent(), onTouchEvent(), onTouch(). on ...

  2. iOS触摸事件处理

    iOS触摸事件处理   主要是记录下iOS的界面触摸事件处理机制,然后用一个实例来说明下应用场景. 一.处理机制 界面响应消息机制分两块, (1)首先在视图的层次结构里找到能响应消息的那个视图. (2 ...

  3. iOS触摸事件处理--备用

    主要是记录下iOS的界面触摸事件处理机制,然后用一个实例来说明下应用场景. 一.处理机制 界面响应消息机制分两块,(1)首先在视图的层次结构里找到能响应消息的那个视图.(2)然后在找到的视图里处理消息 ...

  4. Cocos2d-x Touch事件处理机制

    在Cocos2d-x中提供两种触摸事件处理机制:CCStandardTouchDelegate和CCTargetedTouchDelegate. 一.如何使用 0.默认情况下CCLayer都是没有启动 ...

  5. Cocos2d-x之事件处理机制

    |   版权声明:本文为博主原创文章,未经博主允许不得转载. 事件处理机制分为单点触屏,多点触屏,加速度事件,键盘事件和鼠标事件.在现在的智能手机中,触屏的应用比较的广泛,尤其是多点触屏事件的技术,使 ...

  6. Android的Touch事件处理机制

    Android的Touch事件处理机制比较复杂,特别是在考虑了多点触摸以及事件拦截之后. Android的Touch事件处理分3个层面:Activity层,ViewGroup层,View层. 首先说一 ...

  7. IOS事件处理机制(关于触发者和响应者的确认)

    事件处理机制 在iOS中发生触摸后,事件会加入到UIApplication事件队列(在这个系列关于iOS开发的第一篇文章中我们分析iOS程序原理的时候就说过程序运行后UIApplication会循环监 ...

  8. Android的事件处理机制详解(二)-----基于监听的事件处理机制

    基于监听的事件处理机制 前言: 我们开发的app更多的时候是需要与用户的交互----即对用户的操作进行响应 这就涉及到了android的事件处理机制; android给我们提供了两套功能强大的处理机制 ...

  9. Android的事件处理机制(一)------基于回调机制的事件处理

    Android平台的事件处理机制有两种,一种是基于回调机制的,一种是基于监听接口的,现介绍第一种:基于回调机制的事件处理.Android平台中,每个View都有自己的处理事件的回调方法,开发人员可以通 ...

随机推荐

  1. Qt多线程(有详细例子)

    Qt线程类 Qt 包含下面一些线程相关的类:QThread 提供了开始一个新线程的方法QThreadStorage 提供逐线程数据存储QMutex  提供相互排斥的锁,或互斥量QMutexLocker ...

  2. CentOS 如何修改mysql 用户root的密码

    源地址:http://blog.sina.com.cn/s/blog_6756f85201019zv7.html 第一步:用帐号登录mysql[root@CentOs5 ~]# mysql -u ro ...

  3. Delphi5 update1的序列号

    好不容易找到一个: Serial Number: 100-006-1659Key: 6ax0-91x0 ------------------------------------------- 办法2: ...

  4. 《转》div 中间固定 左右自适应实现

    <转自>:http://www.w3cplus.com/css/layout-column-three 对于我来说,这是一种很少碰到的布局方法,不知道大家有何体会,那么下面我们一起来看这种 ...

  5. 基于三星I9250演示自己弄的Miracast功能-手机对手机

    最终把Miracast功能測试通了,为了节省时间.我的Source端和Sink端都採用同一个机型.这样能够降低我为目标机编译4.4.2源码所耗费的时间.今天简单录制了一段视频.视频是用手机录制的,室内 ...

  6. ArcGIS多面体(multipatch)解析——引

    多面体(multipatch)结构在ArcGIS数据结构中是与点.线.面平行的一种数据结构,对于ArcGIS三维来说是一个很核心的结构,有了它,ArcGIS平台才可以灵活的描述规则和不规则的三维实体. ...

  7. STL的一些泛型算法

    源地址:http://blog.csdn.net/byijie/article/details/8142859 从福州大学资料里摘下来的我现在能理解的泛型算法 algorithm min(a,b) 返 ...

  8. BGP拓扑正确配置

    R1的配置 ----------------------------------------------------------------------------- sysname RT1# sup ...

  9. Android-1-电话拨号程序

    watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMjY1MTM4OQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQk ...

  10. js使用栈来实现10进制转8进制 js取除数 余数

    function ten2eight(x){ var s=[]; var r=''; while(x>0){ s.push(x%8); x=parseInt(x/8); } while(s.le ...