cocos2d触摸事件处理机制(2.x和3.x变化)
2015-06-07 16:53
351 查看
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"); }
相关文章推荐
- cocos2dx-js 集成google play service和admob--------错误处理
- Cocos2d-x坐标系介绍
- cocos2dx 3.2 + vs2012 + win7 工具栏<本地Windows调试器>不见了
- Cocos2d-x 输出中文和版权符号的方法
- Cocos 随写
- 【我所理解的Cocos2d-x】第六章 精灵Sprite 读书笔记
- 我的Cocos2d-x学习笔记(二十三)数据持久化之CCUserDefault
- cocos2d开发学习五:精灵节点CCSpriteBatchNode的渲染和纹理集Texture Atlases内存优化
- 我的Cocos2d-x学习笔记(二十二)CCTextFieldTTF (文字输入)、CCTextFieldDelegate(输入通知事件)
- Cocos2d-x粒子系统
- cocos2d-x Tests讲解三:Particle System(粒子系统)
- 我的Cocos2d-x学习笔记(二十一)内置粒子系统、使用粒子特效文件
- quick Cocos 2dx 学习网站
- 我的Cocos2d-x学习笔记(二十)音乐与音效
- Cocos2d-x使用python创建项目出现WindowsError3错误的解决方案
- cocos2dx 物品下落动作实现
- cocos2d-x-3.6 引擎概述
- Cocos2d-x3.6 Android编译问题
- cocos2d-x lua 使用ListView
- cocos2D-x 3.5 引擎解析之--引用计数(Ref),自动释放池(PoolManager),自动释放池管理器( AutoreleasePool)