您的位置:首页 > 编程语言 > Lua

CCLayer注册lua回调函数setTouchPriority失效

2015-05-26 17:59 531 查看
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);
        }
    }
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: