我在场景中添加了一个孩子的图层。我想当我触摸这个子图层上的任何精灵时,触摸不会转到父图层。 我已经编写了以下代码用于注册触摸事件,但触摸仍然转到父层,而不是从它返回。
void onEnter()
{
Layer::onEnter();
// Register Touch Event
auto dispatcher = Director::getInstance()->getEventDispatcher();
auto listener = EventListenerTouchOneByOne::create();
listener->setSwallowTouches(true);
listener->onTouchBegan = CC_CALLBACK_2(onTouchBegan, this);
listener->onTouchMoved = CC_CALLBACK_2(onTouchMoved, this);
listener->onTouchEnded = CC_CALLBACK_2(onTouchEnded, this);
dispatcher->addEventListenerWithSceneGraphPriority(listener, _cancelLayer);
}
这里_cancelLayer是我的子图层的名称。请有人告诉我这段代码有什么问题吗?我没有在父图层中注册任何触摸事件,但是当我触摸父图层时,它仍会进入触摸功能。
注意:子图层的大小远小于父级。
在touchBegin中,我什么都不做,我只想用它来限制触摸移动到父图层。
bool HeaderTableView::onTouchBegan(Touch *pTouch, Event *pEvent)
{
return true;
}
答案 0 :(得分:1)
TouchEventListener将响应整个屏幕上的触摸,因此您需要检查触摸是否在您想要的边界框中,例如
bool HeaderTableView::onTouchBegan(Touch *pTouch, Event *pEvent)
{
Vec2 touchLocation = pTouch->getLocation(); // Get the touch position
touchLocation = _cancelLayer->getParent()->convertToNodeSpace(touchLocation);
Rect bBox = _cancelLayer->getBoundingBox();
return bBox.containsPoint(touchLocation);
}