本文主要是介绍CCLayer注册lua回调函数setTouchPriority失效,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
CCLayer注册lua回调函数setTouchPriority失效:方式1、不行touchLayer:setTouchPriority(-5000) touchLayer:registerScriptTouchHandler(touchLayerCallFunc)touchLayer:setTouchEnabled(true)maskLayer:addChild(touchLayer)方式2、可以
touchLayer:registerScriptTouchHandler(touchLayerCallFunc, false, -5000, true)
touchLayer:setTouchEnabled(true)
maskLayer:addChild(touchLayer)原因:void CCLayer::registerWithTouchDispatcher()
{CCTouchDispatcher* pDispatcher = CCDirector::sharedDirector()->getTouchDispatcher();// Using LuaBindings/*我们使用registerScriptTouchHandler方法注册了回调,所以m_pScriptTouchHandlerEntry不为空:void CCLayer::registerScriptTouchHandler(int nHandler, bool bIsMultiTouches, int nPriority, bool bSwallowsTouches){unregisterScriptTouchHandler();m_pScriptTouchHandlerEntry = CCTouchScriptHandlerEntry::create(nHandler, bIsMultiTouches, nPriority, bSwallowsTouches);m_pScriptTouchHandlerEntry->retain();}*/if (m_pScriptTouchHandlerEntry){if (m_pScriptTouchHandlerEntry->isMultiTouches()) //多点触摸{pDispatcher->addStandardDelegate(this, 0);LUALOG("[LUA] Add multi-touches event handler: %d", m_pScriptTouchHandlerEntry->getHandler());}else //单点触摸{//注意这里和C++的不同,这个的优先级和是否吞噬,都是CCTouchScriptHandlerEntry类中的成员变量,//也就是我们调用registerScriptTouchHandler方法传进来的值,而不是通过setTouchPriority方法设置//的m_nTouchPriority成员变量,这个变量对于lua没用。pDispatcher->addTargetedDelegate(this,m_pScriptTouchHandlerEntry->getPriority(),m_pScriptTouchHandlerEntry->getSwallowsTouches());LUALOG("[LUA] Add touch event handler: %d", m_pScriptTouchHandlerEntry->getHandler());}}else{if( m_eTouchMode == kCCTouchesAllAtOnce ) {pDispatcher->addStandardDelegate(this, 0);} else {//C++中调用优先级才会用到m_nTouchPriority变量,即可以通过setTouchPriority方法设置。pDispatcher->addTargetedDelegate(this, m_nTouchPriority, true);}}
}
这篇关于CCLayer注册lua回调函数setTouchPriority失效的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!