cocos2d 2.x如何吞下CCMenuItem的触摸

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了cocos2d 2.x如何吞下CCMenuItem的触摸相关的知识,希望对你有一定的参考价值。

我需要吞下一个菜单项的触摸。该项目作为孩子添加到SlidingMenuGrid

(通过Brandon Reynolds,教程网站现在不知道了,但是这里有一个类似的cocos2d-x版本https://github.com/prsolucoes/cocos2d-x/blob/474d3a537855331ebfa71ea1cf56c1cb14687402/SlidingMenu.h)。

多年来,它一直在为我的老手机工作。但在具有3D触控功能的较新手机上,屏幕太“敏感”。当用户点击某个项目并且甚至只移动一点时,点击事件将被取消并且屏幕开始滚动。

如何让它不那么敏感,或者我可以在用户TouchBegan项目时吞下触摸(这样项目范围内的TouchedMoved不会传播到网格)

我试过在ccTouchBegin中添加一个空的CCMenuItem函数,但它没有用

-(void)touchBegan:(UITouch *)touch withEvent:(UIEvent *)event
{
    // empty implementation to swallow touch
}
答案

通常,如果使用得当,CCMenuItem已经吞下了触摸。

包含它的CCLayer不应该取消触摸。您可能直接将CCMenuItem作为CCLayer的孩子。你能尝试在两者之间加一个CCMenu吗?就像是

CCMenu *menu = [CCMenu menuWithItem: item];
menu.position = ccp(0, 0);
[self addChild: menu];
另一答案

您可以在init函数中为场景添加一个侦听器,并将其swallowtouch属性设置为true

auto listener = EventListenerTouchOneByOne::create();
listener->setSwallowTouches(true);
listener->onTouchBegan = CC_CALLBACK_2(YourScene::onTouchBegan, this);
listener->onTouchEnded = CC_CALLBACK_2(YourScene::onTouchEnded, this);
_eventDispatcher->addEventListenerWithSceneGraphpriority(listener, this);

并处理以下功能中的触摸事件

bool YourScene::onTouchEnded(cocos2d::Touch *touch, cocos2d::Event *event)
{
    //on touch ended code
    return false;
}

bool YourScene::onTouchBegan(cocos2d::Touch *touch, cocos2d::Event *event)
{
    //on touch began code
    return true;
}

以上是关于cocos2d 2.x如何吞下CCMenuItem的触摸的主要内容,如果未能解决你的问题,请参考以下文章

Cocos2d v2.x (ios) - 如何做循环滚动?

刚刚开始学COCOS2D,在CCMenu中的菜单按键事件中,有按下的效果,但是没有回调按键指定的函数,求教啊~~

Cocos2d 2.x:我似乎无法更改 3GS 的启动图像!它仍然显示 Cocos2d 橙色默认图像

如何阻止 UIScrollView 吞下触摸

如何防止 Sublime Text 2 吞下右括号、引号和圆括号?

如何让鱼吞下?或者至少从程序中脱离出来