cocos2d-x CCScene注册触摸事件

来源:互联网 发布:阿里云选择镜像 编辑:程序博客网 时间:2024/05/19 00:48

刚学习,今天遇到开启触摸,发现

 this->setTouchEnabled(true); 这句话始终没有,原来是在

CCScene

中,没有这个方法,如果非要在其中,可以先让这个ccscene类实现

CCStandardTouchDelegate这个接口,然后实现响应的4个方法;

  

到底this->setTouchEnabled(true);发生了什么事,分析源码,不难发现他们经过:

1、

this->registerWithTouchDispatcher();

2、

 CCTouchDispatcher* pDispatcher =CCDirector::sharedDirector()->getTouchDispatcher();

 pDispatcher->addStandardDelegate(this,0);

 

这样得话,我们其实还得在这个类的init中加上,这句话

CCDirector::sharedDirector()->getTouchDispatcher()->addStandardDelegate(this, 0); 

这样场景中得层可以监听,

也就是不需要this->setTouchEnabled(true);

 

ps:分析源码,其实在我们OnEnter(),方法中也调用了this->registerWithTouchDispatcher();只不过,m_bTouchEnabled 默认false;

void CCLayer::onEnter()

{

   CCDirector* pDirector = CCDirector::sharedDirector();

   // register 'parent' nodes first

   // since events are propagated in reverseorder

   if (m_bTouchEnabled)

   {

       this->registerWithTouchDispatcher();

   }

 

   ..............

}

呵呵,在 CCLayer中可以直接用CCDirector::sharedDirector()->getTouchDispatcher()->addStandardDelegate(this0); 代替this->setTouchEnabled(true);等于 脱了裤子放屁!

需要此对象实现CCStandardTouchDelegate接口。
使用addStandardDelegate方法把自己注册给触摸事件分发器。
重载事件回调函数,处理触摸事件;
当不再需要接收触摸事件时,使用removeDelegate
方法来注销触摸事件的接收。