处理子层Cocos2d-x上的触摸

时间:2015-06-17 09:50:12

标签: c++ ios cocos2d-x event-listener

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

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

1 个答案:

答案 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);
}
相关问题