处理子层上的触摸 Cocos2d-x

Handling touches on child layer Cocos2d-x

我在场景中添加了一个图层作为子图层。我想当我触摸这个子层上的任何精灵时,触摸不会转到父层。 我已经编写了以下代码来注册触摸事件,但触摸仍会转到父层,而不是从父层返回。

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;
}

TouchEventListener 会响应整个屏幕的触摸,所以你需要检查触摸是否在你想要的边界框内,like

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);
}