CCMenu超过CCScrollView边框还能点击处理,以及拖动CCMenuItem不响应点击事件

本文探讨了在cocos2d-x中,当CCMenu超出CCScrollView边界仍能响应点击以及CCMenuItem在拖动时不响应点击事件的问题。作者通过查看底层代码,发现是由于CCMenu的响应优先级过高导致。为解决此问题,作者建议创建一个继承自CCMenu的新类WMMenu,重写registerWithTouchDispatcher方法,降低CCMenu的响应优先级,以改善用户体验。
摘要由CSDN通过智能技术生成

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
    {
      
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值