关于cocos2d-x中CCScrollView添加CCMenu一系列问题的解决方案

上次说到CCScrollView里面添加CCMenu可以解决触摸优先级的问题,但实际上还有问题,滑动是可以滑动了,但滑动一松手,它可能立马响应CCMenu的点击事件,还有,当CCMenu超出可视区域后还是能够点击,这也是让人头疼的问题。问题虽然让人头疼,但解决方案还是有的。我们还是从上篇的CCMenu的扩展类MyMenu入手,我给MyMenu添加moved属性,初始化为false,在ccTouchMove事件里赋值为true,最后在ccTouchEnd里面判断是否move,如果move就不调用CCMenu的ccTouchEnd。这里要注意两点,一是每次ccTouchBegan的时候都要将move设为false,还有ccTouchEnd里面当move为true时,继承CCMenu的属性m_eState要设为kCCMenuStateWaiting,否则它就会在ccTouchBegan的时候return false而进不到ccTouchEnd中了。具体代码:

 1 bool MyMenu::ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent){    
 2     if(visibleRect_.size.width&&visibleRect_.size.height){
 3         if(!visibleRect_.containsPoint(pTouch->getLocation()))
 4             return false;
 5     }
 6     startPosition = pTouch->getLocation(); 
7
return CCMenu::ccTouchBegan(pTouch,pEvent); 8 } 9 10 void MyMenu::ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent){
12 CCMenu::ccTouchMoved(pTouch,pEvent); 13 } 14 15 void MyMenu::ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent){ 16 CCPoint position = pTouch->getLocation();
if(position.y - startPosition.y <= 10 && position.y - startPosition.y >= -10)
17 CCMenu::ccTouchEnded(pTouch,pEvent); 18 else 19 m_eState = kCCMenuStateWaiting; 20 }

大家发现ccTouchBegan里面多了visibleRect_几行代码,这个就是用来判断CCMenu是否在可视区域,当不在可视区域直接return false,这样在超出可视区域点击CCMenu是无效的。当然这个可视区域是具体使用的地方传入的,其实也就是scrollView的viewSize。好啦,至此关于CCScrollView中添加CCMenu造成的一系列问题都得以解决。(在不断的尝试中总结经验,以帮助后面的人更快的上路,http://zhs.guohe.in/)

转载于:https://www.cnblogs.com/yeshanghai/archive/2013/01/05/2846619.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值