关于CCLayer源码中一段匪夷所思的代码

刚刚在阅读cocos-2dx中的源码,
在3.2rc0版中cocos2d-x-3.2\cocos\2d\CCLayer.cpp中第185行

void Layer::setTouchMode(Touch::DispatchMode mode)
{
    if(_touchMode != mode)
    {
        _touchMode = mode;

        if( _touchEnabled)
        {
            setTouchEnabled(false);
            setTouchEnabled(true);
        }
    }
}


```


大家可以去看看其他版本里的这个方法啊,
这里
            setTouchEnabled(false);
            setTouchEnabled(true);
真让人 摸不着头脑啊

果然,而且我看的是2.2.3……:3:

而且,紧接着下面的代码

void CCLayer::setTouchPriority(int priority)
{
    if (m_nTouchPriority != priority)
    {
        m_nTouchPriority = priority;
        
        if( m_bTouchEnabled)
        {
            setTouchEnabled(false);
            setTouchEnabled(true);
        }
    }
}


```


这是复制粘贴过来的吧?

有人能解释下吗?
是版本遗留问题?还是有什么特殊机制吗?

setTouchPriorty中,除了令人匪夷所思的两段代码,作用仅仅是把Layer中的m_nTouchPriority的值改了一下。

会达到需要的效果吗?

不会的,你需要更新该Layer在TouchDispatcher中的状态,

其实你跳进setTouchEnabled(bool) 中看一下,就明白了。

setTouchEnabled(false)的作用是移除掉该Layer的触摸注册

再调用一次setTouchEnabled(true)的作用,就是重新注册触摸了,这样你设置的Priority才会真正的生效。

当然这么写确实是让人摸不着头脑的,因为从程序员的视角上这两行代码是没逻辑的,可能当时作者在写这里的时候就是为了省事吧!

1赞

:12:确实是这样。不多余么

原来如此,学习了

受教了,谢谢了