刚学习,今天遇到开启触摸,发现
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(this, 0); 代替this->setTouchEnabled(true);等于 脱了裤子放屁!
需要此对象实现CCStandardTouchDelegate接口。
使用addStandardDelegate方法把自己注册给触摸事件分发器。
重载事件回调函数,处理触摸事件;
当不再需要接收触摸事件时,使用removeDelegate方法来注销触摸事件的接收。