场景:
layer1上面是layer2,layer2上面是一个menu
现象:
触摸menu上的按钮之后,该触摸动作会继续被传下去(按说这个menu不应该吞没了这个触摸事件吗?),导致layer1响应了这个触摸事件。
于是我回到cocos的源代码,看到menu创建中的这段:
auto touchListener = EventListenerTouchOneByOne::create();
touchListener->setSwallowTouches(true);
touchListener->onTouchBegan = CC_CALLBACK_2(Menu::onTouchBegan, this);
touchListener->onTouchMoved = CC_CALLBACK_2(Menu::onTouchMoved, this);
touchListener->onTouchEnded = CC_CALLBACK_2(Menu::onTouchEnded, this);
touchListener->onTouchCancelled = CC_CALLBACK_2(Menu::onTouchCancelled, this);
_eventDispatcher->addEventListenerWithSceneGraphPriority(touchListener, this);
```
onTouchBegan是这么定义的:
bool Menu::onTouchBegan(Touch* touch, Event* event)
{
if (_state != Menu::State::WAITING || ! _visible || !_enabled)
{
return false;
}
for (Node *c = this->_parent; c != nullptr; c = c->getParent())
{
if (c->isVisible() == false)
{
return false;
}
}
_selectedItem = this->getItemForTouch(touch);
if (_selectedItem)
{
_state = Menu::State::TRACKING_TOUCH;
_selectedItem->selected();
return true;
}
return false;
}
```
可见menu在创建时是设置了事件吞并的,可事实却是我的程序中,触摸事件继续被传下去了!!
不知道是什么原因,不知道版里有没有遇到类似问题的大神?
PS:我的代码是基于lua-binding写的