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