转自http://blog.csdn.net/shun_fzll/article/details/24014967
在cocos2dx 3.0版本中,废弃了以往2.x版本的写法,我们先来看一下Layer.h中的一段代码
- /*Callbackfunctionshouldnotbedeprecated,itwillgeneratelotsofwarnings.
- Since'setTouchEnabled'wasdeprecated,itwillmakewarningsifdeveloperoverridesonTouchXXXandinvokessetTouchEnabled(true)insteadofusingEventdispatcher::addEventListenerWithXXX.
- */
- //单点触摸
- virtualboolonTouchBegan(Touch*touch,Event*unused_event);
- virtualvoidonTouchMoved(Touch*touch,Event*unused_event);
- voidonTouchEnded(Touch*touch,153); font-weight:bold; background-color:inherit">voidonTouchCancelled(Touch*touch,0); background-color:inherit">//多点触摸
- voidontouchesBegan(conststd::vector<Touch*>&touches,153); font-weight:bold; background-color:inherit">voidontouchesMoved(voidontouchesEnded(voidontouchesCancelled(
单点触摸:(即只有注册的Layer才能接收触摸事件)
onTouchBegan:如果返回true:本层的后续Touch事件可以被触发,并阻挡向后层传递
如果返回false,本层的后续Touch事件不能被触发,并向后传递
简单点来说,如果
1.Layer 只有一层的情况:
virtualboolonTouchBegan(CCTouch*pTouch,CCEvent*pEvent);a.返回false,则ccTouchMoved(),ccTouchEnded()不会再接收到消息b.返回true,则ccTouchMoved(),ccTouchEnded()可以接收到消息2.Layer 有多层的情况:CCEvent*pEvent);a.返回false,则本层的onTouchMoved(),onTouchEnded()不会再接收到消息,但是本层之下的其它层会接收到消息b.返回true,则本层的onTouchMoved(),onTouchEnded()可以接收到消息,但是本层之下的其它层不能再接收到消息单点触摸简单用法:
- autodispatcher=Director::getInstance()->getEventdispatcher();
- autolistener=EventListenerTouchOneByOne::create();
- listener->onTouchBegan=CC_CALLBACK_2(GameLayer::onTouchBegan,this);
- listener->onTouchMoved=CC_CALLBACK_2(GameLayer::onTouchMoved,153); font-weight:bold; background-color:inherit">this);
- listener->onTouchEnded=CC_CALLBACK_2(GameLayer::onTouchEnded,248)"> listener->setSwallowtouches(true);//不向下传递触摸
- dispatcher->addEventListenerWithSceneGraPHPriority(listener,153); font-weight:bold; background-color:inherit">this);