cocos2d触摸事件处理机制(2.x和3.x变化)
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版本号的触屏事件
//单点触摸
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变化)的更多相关文章
- Android 触摸事件处理机制
Android 触摸事件的处理主要涉及到几个方法:onInterceptTouchEvent(), dipatchTouchEvent(), onTouchEvent(), onTouch(). on ...
- iOS触摸事件处理
iOS触摸事件处理 主要是记录下iOS的界面触摸事件处理机制,然后用一个实例来说明下应用场景. 一.处理机制 界面响应消息机制分两块, (1)首先在视图的层次结构里找到能响应消息的那个视图. (2 ...
- iOS触摸事件处理--备用
主要是记录下iOS的界面触摸事件处理机制,然后用一个实例来说明下应用场景. 一.处理机制 界面响应消息机制分两块,(1)首先在视图的层次结构里找到能响应消息的那个视图.(2)然后在找到的视图里处理消息 ...
- Cocos2d-x Touch事件处理机制
在Cocos2d-x中提供两种触摸事件处理机制:CCStandardTouchDelegate和CCTargetedTouchDelegate. 一.如何使用 0.默认情况下CCLayer都是没有启动 ...
- Cocos2d-x之事件处理机制
| 版权声明:本文为博主原创文章,未经博主允许不得转载. 事件处理机制分为单点触屏,多点触屏,加速度事件,键盘事件和鼠标事件.在现在的智能手机中,触屏的应用比较的广泛,尤其是多点触屏事件的技术,使 ...
- Android的Touch事件处理机制
Android的Touch事件处理机制比较复杂,特别是在考虑了多点触摸以及事件拦截之后. Android的Touch事件处理分3个层面:Activity层,ViewGroup层,View层. 首先说一 ...
- IOS事件处理机制(关于触发者和响应者的确认)
事件处理机制 在iOS中发生触摸后,事件会加入到UIApplication事件队列(在这个系列关于iOS开发的第一篇文章中我们分析iOS程序原理的时候就说过程序运行后UIApplication会循环监 ...
- Android的事件处理机制详解(二)-----基于监听的事件处理机制
基于监听的事件处理机制 前言: 我们开发的app更多的时候是需要与用户的交互----即对用户的操作进行响应 这就涉及到了android的事件处理机制; android给我们提供了两套功能强大的处理机制 ...
- Android的事件处理机制(一)------基于回调机制的事件处理
Android平台的事件处理机制有两种,一种是基于回调机制的,一种是基于监听接口的,现介绍第一种:基于回调机制的事件处理.Android平台中,每个View都有自己的处理事件的回调方法,开发人员可以通 ...
随机推荐
- css中的hover ,关于li与a标签的问题
<head> <style> ul li a:hover{ background-color: red; } </style></head><ul ...
- windows程序员进阶系列:《软件调试》之Win32堆的调试支持
Win32堆的调试支持 为了帮助程序员及时发现堆中的问题,堆管理器提供了以下功能来辅助调试. 1:堆尾检查(Heap Tail Check) HTC,在堆尾添加额外的标记信息,用于检测堆块是否溢出. ...
- Linux程序设计学习笔记----多线程编程线程同步机制之相互排斥量(锁)与读写锁
相互排斥锁通信机制 基本原理 相互排斥锁以排他方式防止共享数据被并发訪问,相互排斥锁是一个二元变量,状态为开(0)和关(1),将某个共享资源与某个相互排斥锁逻辑上绑定之后,对该资源的訪问操作例如以下: ...
- CSU 1506(最小费用最大流)
传送门:Double Shortest Paths 题意:有两个人:给出路径之间第一个人走所需要的费用和第二个人走所需要的费用(在第一个人所需的 费用上再加上第二次的费用):求两个人一共所需要的最小费 ...
- MSA2312 enclosure 闪断后
故障描述:由于电源原因,导致整个扩展柜闪断,硬盘全部为leftover状态. 存储划分配置:之前满配的一套MSA2312,划分为4个vd,后面两个vd无影响,前面2个VD都是一半在1号柜子,一半在2号 ...
- Ubuntu 问题解决汇总
汇总一些ubuntu相关的问题 1.Ubuntu支持安装多媒体播放插件(新系统安装后必备) ubuntu-restricted-extras package allows users to insta ...
- 一种单片机支持WiFi的应用——SimpleWiFi在单片机中的应用
一种单片机支持WiFi的应用——SimpleWiFi在单片机中的应用 先上图: 现在的智能控制都是基于微控制器,随着智能的手持终端的普及,基于智能终端的控制就会越来越普遍. WIFI便是其中的一种.W ...
- 通用型CRM还是行业型CRM?-定制为王
大数据时代,怎样利用工具摆脱繁杂的数据管理之苦,洞察有价值的销售信息,是每一个管理者的迫切须要.Zoho CRM问世10年来,见证了一个个行业客户怎样在CRM帮助下实现了效率和业绩提升.相同,广泛的 ...
- tolua 有些功能可以用(经过测试)
tolua 提供几个 C++ 与 Lua 进行数据交换的工具函数. ~~ tolua.type 返回一个 C++ 对象的类型描写叙述字符串. local node = display.newNode( ...
- 用XAML做网页!!—边栏与页脚
原文:用XAML做网页!!-边栏与页脚 此次我们来设计边栏和页脚,首先从页脚开始,其代码很简单: <Border x:Name="Footer" BorderBrush=&q ...