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

一、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,226)"> 多点触摸需要重载的方法

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,226)"> 二、单点触摸本质上需要调用方法,即设置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,226)"> //CDirector::sharedDirector()->getTouchdispatcher()->addTargetedDelegate(this,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()方法来替换

相关文章

    本文实践自 RayWenderlich、Ali Hafizji 的文章《...
Cocos-code-ide使用入门学习地点:杭州滨江邮箱:appdevzw@1...
第一次開始用手游引擎挺激动!!!进入正题。下载资源1:从C...
    Cocos2d-x是一款强大的基于OpenGLES的跨平台游戏开发...
1.  来源 QuickV3sample项目中的2048样例游戏,以及最近《...
   Cocos2d-x3.x已经支持使用CMake来进行构建了,这里尝试...