未调用菜单回调
menu callback in not called
我想添加几个按钮 - "settings" 和 "restart" 到我的场景,放置在所有内容之上。我 [在我的 init()] 中执行以下操作:
auto settingsMenu = MenuItemImage::create("settings_gold@2x.png", "settings_white@2x.png",
CC_CALLBACK_1(GameLevelLayer::settingsButtonTapped, this));
settingsMenu->setPosition(Point(440, 280));
this->addChild(settingsMenu);
我还添加触摸处理程序来处理游戏 "actions,",如下所示:
// 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() 调用正常,但 settingsButtonTapped() 从未被调用,因为触摸处理程序显然吞噬了一切。
在cocos2d-x3.x中应该如何处理,以便点击菜单调用settingsButtonTapped()?
谢谢
同事建议 cocos2d-x 3.x 方法是使用 ui:Button,而不是 MenuItemImage。
将代码更改为:
auto settingsButton = cocos2d::ui::Button::create();
settingsButton->setTouchEnabled(true);
settingsButton->loadTextures("settings_gold@2x.png", "settings_white@2x.png");
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);
现在,按下按钮会调用按钮回调,层上的触摸仍按原样处理。
我想添加几个按钮 - "settings" 和 "restart" 到我的场景,放置在所有内容之上。我 [在我的 init()] 中执行以下操作:
auto settingsMenu = MenuItemImage::create("settings_gold@2x.png", "settings_white@2x.png",
CC_CALLBACK_1(GameLevelLayer::settingsButtonTapped, this));
settingsMenu->setPosition(Point(440, 280));
this->addChild(settingsMenu);
我还添加触摸处理程序来处理游戏 "actions,",如下所示:
// 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() 调用正常,但 settingsButtonTapped() 从未被调用,因为触摸处理程序显然吞噬了一切。
在cocos2d-x3.x中应该如何处理,以便点击菜单调用settingsButtonTapped()?
谢谢
同事建议 cocos2d-x 3.x 方法是使用 ui:Button,而不是 MenuItemImage。
将代码更改为:
auto settingsButton = cocos2d::ui::Button::create();
settingsButton->setTouchEnabled(true);
settingsButton->loadTextures("settings_gold@2x.png", "settings_white@2x.png");
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);
现在,按下按钮会调用按钮回调,层上的触摸仍按原样处理。