作者:D之phper | 来源:互联网 | 2023-05-17 20:54
本站文章转载务必在明显处注明:原文链接http:blog.csdn.netcjsenarticledetails17240319前言在cocos2dx3.0开始
本站文章转载务必在明显处注明:原文链接 http://blog.csdn.net/cjsen/article/details/17240319
前言
在cocos2dx 3.0 开始 Layer的点击事件以节点的添加顺序进行分配,在Layer侦听onTouchBegan等方法
Layer 添加侦听事件
在Layer初始化方法中添加以下代码
this->setSwallowsTouches(false);//是否吞食事件的传递,单点触摸模式下才起作用
setTouchEnabled(true);//开启事件侦听
this->setTouchMode(Touch::DispatchMode::ONE_BY_ONE);//单点触摸
在.ccp中实现下面这些方法
virtual bool onTouchBegan(Touch* pTouch, Event* pEvent);
virtual void onTouchMoved(Touch* pTouch, Event* pEvent);
virtual void onTouchEnded(Touch* pTouch, Event* pEvent);
virtual void onTouchCancelled(Touch* pTouch, Event* pEvent);
在非Layer节点 中侦听事件(此方法也可用在Layer中)
static Layer* m_pOldLayer = NULL;
void ZY_TableChange::initTouchEvent(){
//
auto m_pListener = EventListenerTouch::create(Touch::DispatchMode::ONE_BY_ONE);
m_pListener->setSwallowTouches(false);
m_pListener -> retain();
m_pListener->OnTouchBegan= [](Touch* touch, Event* event) {
m_pOldLayer->onTouchBegan(touch, event);
return true;
};
m_pListener->OnTouchMoved= [](Touch* touch, Event* event) {
m_pOldLayer->onTouchMoved(touch, event);
};
m_pListener->OnTouchEnded= [](Touch* touch, Event* event) {
m_pOldLayer->onTouchEnded(touch, event);
};
m_pListener->OnTouchCancelled= [](Touch* touch, Event* event) {
m_pOldLayer->onTouchCancelled(touch, event);
};
EventDispatcher::getInstance()->addEventListenerWithFixedPriority(m_pListener, -100);
}