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

问题描述 投票:1回答:2

我需要吞下一个菜单项的触摸。该项目作为孩子添加到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
}
io cocos2d-iphone cocos2d-x
2个回答
1
投票

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

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

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

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;
}
© www.soinside.com 2019 - 2024. All rights reserved.