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

时间:2017-11-27 04:26:53

标签: io cocos2d-iphone cocos2d-x

我需要触摸菜单项的触摸。该项目已作为子项添加到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
}

2 个答案:

答案 0 :(得分:1)

如果使用得当,CCMenuItem通常会吞下触摸。

包含它的CCLayer不应取消触摸。您可能直接将CCMenuItem作为CCLayer的孩子。您可以尝试在其间添加CCMenu吗?像

这样的东西
CCMenu *menu = [CCMenu menuWithItem: item];
menu.position = ccp(0, 0);
[self addChild: menu];

答案 1 :(得分:0)

你可以在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;
}