3.x需要自己注册监听事件。
有两种方式,一个是用C++的bind绑定自定义函数,cocos2d-x封装了一下,提供了接口: CC_CALLBACK_数字,数字代表参数个数。
EventListener需要两个参数(Touch * 和 Event *),所以这里使用的是CC_CALLBACK_2:
auto dispatcher = Director::getInstance()->getEventDispatcher();
auto listener = EventListenerTouchOneByOne::create();
listener->onTouchBegan = CC_CALLBACK_2(HelloWorld::onTouchBegan, this);
listener->onTouchMoved = CC_CALLBACK_2(HelloWorld::onTouchMoved, this);
listener->onTouchEnded = CC_CALLBACK_2(HelloWorld::onTouchEnded, this);
listener->onTouchCancelled = CC_CALLBACK_2(HelloWorld::onTouchCancelled, this);
listener->setSwallowTouches(true); //不向下传递触摸
dispatcher->addEventListenerWithSceneGraphPriority(listener, this);
bool HelloWorld::onTouchBegan(Touch *touch, Event *unused_event){ return true;}void HelloWorld::onTouchMoved(Touch *touch, Event *unused_event){}void HelloWorld::onTouchEnded(Touch *touch, Event *unused_event){}void HelloWorld::onTouchCancelled(Touch *touch, Event *unused_event){}
另一种方式是使用c++的lambda,[&]代表lambda内部使用外部变量的方式是引用:
auto dispatcher = Director::getInstance()->getEventDispatcher();
auto listener = EventListenerTouchOneByOne::create();
listener->onTouchBegan = [&](Touch *touch, Event *unused_event)->bool{
return true;
};
listener->onTouchMoved = [&](Touch *touch, Event *unused_event){
};
listener->onTouchEnded = [&](Touch *touch, Event *unused_event){
};
listener->onTouchCancelled = [&](Touch *touch, Event *unused_event){
};
listener->setSwallowTouches(true); //不向下传递触摸
dispatcher->addEventListenerWithSceneGraphPriority(listener, this);