CCMenu超过CCScrollView边框还能点击处理,以及拖动CCMenuItem不响应点击事件
最近做项目,遇到了这个问题,相信大家也会有很多遇见的,那就是CCScrollView或者CCTableView里面放入的按钮(这里的按钮我们用CCMenuItem来设置)超出滑动区域了还会响应点击事件,并且当点击在CCMenuItem上面的时候,还不能拖动,它会直接响应点击事件,让用户体验很不好,本来我对CCMenu底层的实现是一点也没看过的,对什么响应的优先级也是不怎么明白,正好趁这个机会,我看了看cocos2d-x底层的代码,就当一个学习机会了。
首先CCMenu继承的是CCLayer,CCLayer有一个虚函数,就是用来设置响应优先级的,我们看CCLayer的源代码:
/// Touch and Accelerometer related
void CCLayer::registerWithTouchDispatcher()
{
CCTouchDispatcher* pDispatcher = CCDirector::sharedDirector()->getTouchDispatcher();
// Using LuaBindings
if (m_pScriptHandlerEntry)
{
if (m_pScriptHandlerEntry->isMultiTouches())
{
pDispatcher->addStandardDelegate(this, 0);
LUALOG("[LUA] Add multi-touches event handler: %d", m_pScriptHandlerEntry->getHandler());
}
else
{
pDispatcher->addTargetedDelegate(this,
m_pScriptHandlerEntry->getPriority(),
m_pScriptHandlerEntry->getSwallowsTouches());
LUALOG("[LUA] Add touch event handler: %d", m_pScriptHandlerEntry->getHandler());
}
}
else
{