cocos2d-x 3 Как заставить спрайт проглатывать все касания только на нем

У меня есть 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, но это не помогает. Где решение?


person Narek    schedule 25.06.2014    source источник


Ответы (1)


Ответ здесь: http://www.cocos2d-x.org/wiki/How_To_Subclass_Sprite_And_Add_Event_Listeners

Я изменил здесь следующие вещи:

  • Vector2 to Vec2,
  • удален второй аргумент в void touchEvent(cocos2d::Touch* touch, cocos2d::Vector2 _p);
  • MySprite::touchEvent(touch); to touchEvent(touch);
  • cocos2d::Director::getInstance()->getEventDispatcher()->addEventListenerWithFixedPriority(listener, 30); to _eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this);

Получается, что спрайт должен проверять, есть ли на нем касание, а не глотать, но возвращать true в onTouchBeganlistener, иначе false.

person Narek    schedule 25.06.2014
comment
Ссылка недоступна - person salih kallai; 29.04.2018
comment
Для получения дополнительной информации: discuss.cocos2d-x.org/t/ - person ThatsJustCheesy; 18.08.2020