2015-08-30 3 views
0

Я хочу добавить пару кнопок - «настройки» и «перезапустить» на мою сцену, расположенную над всем. Я ниже [в моей инициализации()]:вызов вызова в вызове

auto settingsMenu = MenuItemImage::create("[email protected]", "[email protected]", 
CC_CALLBACK_1(GameLevelLayer::settingsButtonTapped, this)); 
settingsMenu->setPosition(Point(440, 280)); 
this->addChild(settingsMenu); 

Я также добавить сенсорный обработчик для обработки игры "действий", как показано ниже:

// handle user touches 
auto dispatcher = Director::getInstance()->getEventDispatcher(); 
auto listener = EventListenerTouchOneByOne::create(); 
listener->onTouchBegan = CC_CALLBACK_2(GameLevelLayer::onTouchBegan, this); 
listener->onTouchEnded = CC_CALLBACK_2(GameLevelLayer::onTouchEnded, this); 
dispatcher->addEventListenerWithSceneGraphPriority(listener, this); 

Моего onTouchBegan() и onTouchEnded() является но настройкиButtonTapped() никогда не вызываются, поскольку обработчик касаний, очевидно, проглатывает все.

Как это должно обрабатываться в cocos2d-x 3.x, так что нажатие на меню вызывает settingsButtonTapped()?

Спасибо

+0

Вы можете добавить код своего метода onTouchBegan? – mromer

ответ

1

коллега сообщил, что cocos2d-х 3.x способ заключается в использовании пользовательского интерфейса: кнопки, вместо MenuItemImage.

Изменен код быть:

auto settingsButton = cocos2d::ui::Button::create(); 
settingsButton->setTouchEnabled(true); 
settingsButton->loadTextures("[email protected]", "[email protected]"); 
settingsButton->setPosition(Point(440, 270)); 
settingsButton->addTouchEventListener(CC_CALLBACK_2(GameLevelLayer::settingsButtonTapped, this)); 
this->addChild(settingsButton); 

// handle user touches 
auto dispatcher = Director::getInstance()->getEventDispatcher(); 
auto listener = EventListenerTouchOneByOne::create(); 
listener->onTouchBegan = CC_CALLBACK_2(GameLevelLayer::onTouchBegan, this); 
listener->onTouchEnded = CC_CALLBACK_2(GameLevelLayer::onTouchEnded, this); 
dispatcher->addEventListenerWithSceneGraphPriority(listener, this); 

Теперь нажатие кнопки вызывает кнопку обратного вызова, и штрихи на слое все еще обрабатываются, как они были.

Смежные вопросы