cocos2d-x 3如何让sprite吞下所有触摸它

时间:2014-06-25 22:17:12

标签: c++ cocos2d-x cocos2d-x-3.0

我有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但它没有帮助。解决方案在哪里?

1 个答案:

答案 0 :(得分:4)

答案在这里:http://www.cocos2d-x.org/wiki/How_To_Subclass_Sprite_And_Add_Event_Listeners

我在这里改变了以下内容:

  • Vector2Vec2
  • 删除了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