cocos2d-x CCScene注册触摸事件

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

 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
方法来注销触摸事件的接收。 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值