cocos2d-x注册touch事件
之前在写cocos2d项目时,一般注册touch事件都是在init()方法中或onEnter()方法中,例如:
bool GameLayer::init(){
if (!CCLayer::init()) {
return false;
}
CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, 0, true);
return true;
}
或
void GameLayer::onEnter(){
CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, 0, true);
ccNode::onEnter();
}
然后在onExit();方法中取消touch事件的注册,像
void GameLayer::onExit(){
CCDirector::sharedDirector()->getTouchDispatcher()->getTouchDispatcher()- >removeDelegate(this);
ccNode::onExit();
}
其实,在cocos2d的api中还有比这简便的方法来节省代码和增强代码的阅读性,在继承cclayer时,父类有一个 registerWithTouchDispatcher()方法,在onEnter方法中被调用,所以在我们继承父类时,重写registerWithT ouchDispatcher()方法即可,在registerWithTouchDispatcher()方法中注册touch事件
void GameLayer::registerWithTouchDispatcher(){
CCLOG("registerWithTouchDispatcher");
CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, 0, true);
}
这样在你退出的时候不用再去写取消touch事件的方法,父类会在onExit方法中帮你注销。
当然这样写还要注意的是,必须现在init方法中开启触摸事件,即 this->setTouchEnabled(true);,否则是不会去 自动执行registerWithTouchDispatcher()方法里面的代码的, this->setTouchEnabled(true);方法默认是开启多点 触摸事件,上面写的是注册单点的方法,注册多点的方法是
CCDirector::sharedDirector()->getTouchDispatcher()->addStandardDelegate(this, 0);
好了,这里是我的理解,不对的地方还请指出,大家一起进步!!!