我有main layer
应该获得触摸事件。但是在该层上有一个navigation bar
,其中包含按钮和其他精灵,并且是cocos2d::Sprite
的子类。现在我需要navigation bar
上的所有触摸都不被解释为main layer
上的触摸。按钮正常工作,但navigation bar
精灵将触摸传递给main layer
。我这样做是为了防止传递事件:
auto touchListenerOneByOne = EventListenerTouchOneByOne::create();
touchListenerOneByOne->setSwallowTouches(true);
touchListenerOneByOne->onTouchBegan = CC_CALLBACK_2(NavigationBar::onBoardTouchBegan, this);
_eventDispatcher->addEventListenerWithSceneGraphPriority(touchListenerOneByOne, this);
bool NavigationBar::onBoardTouchBegan(Touch* touch, Event* event)
{
CCLOG("Navigation sprite is touched......!");
return true;
}
这可以防止传球,但会阻挡 - 吞下所有接触。即使我没有触及main layer
,我也无法将任何触摸传递给navigation bar
。我曾尝试使用setContentSize
但它没有帮助。解决方案在哪里?
答案 0 :(得分:4)
答案在这里:http://www.cocos2d-x.org/wiki/How_To_Subclass_Sprite_And_Add_Event_Listeners
我在这里改变了以下内容:
Vector2
至Vec2
,void touchEvent(cocos2d::Touch* touch, cocos2d::Vector2 _p);
MySprite::touchEvent(touch);
至touchEvent(touch);
cocos2d::Director::getInstance()->getEventDispatcher()->addEventListenerWithFixedPriority(listener, 30);
至_eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this);
该精灵应该检查触摸是否在其上,而不是吞下,但在true
侦听器中返回onTouchBegan
,否则false
。