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