Почему мой MenuItem не активен?
У меня есть MenuItem с меткой и набором обратного вызова, и он все еще не работает, что мне нужно делать?
Menu* menu = Menu::create();
Label* lbl = Label::createWithTTF("My Label", "fonts/Marker Felt.ttf", 25);
MenuItemLabel* item_label = MenuItemLabel::create(lbl);
item_label->setCallback(callback);
MenuItem* menu_item = MenuItem::create();
menu_item->addChild(item_label);
menu->addChild(menu_item);
myLayer->addChild(menu);
Даже добавив обратный вызов в menu_item
ничего не меняет Что мне нужно сделать, чтобы сделать мое меню кликабельным?
2 ответа
Проблема в том, что MenuItemLabel
не является ярлыком для MenuItem
, но подкласс этого. Так что я думаю, что происходит, что, несмотря на то, что вы видите ярлык на экране, вы щелкаете MenuItem и ищете его callback
и так как он не находит NULL или что-то еще, он не пытается найти ни одного из своих дочерних элементов, которые могут иметь его, или что его размер равен 0, поэтому вы никогда не сможете щелкнуть по нему.
Во всяком случае, я не совсем ясен в деталях, только для того, чтобы исправить проблему, вам нужно удалить экземпляр MenuItem
и только использовать MenuItemLabel
:
Menu* menu = Menu::create();
Label* lbl = Label::createWithTTF("My Label", "fonts/Marker Felt.ttf", 25);
MenuItemLabel* item_label = MenuItemLabel::create(lbl);
item_label->setCallback(callback);
menu->addChild(item_label);
myLayer->addChild(menu);
You can do like this: i checked, its working in cocos2d-x 3.2 .
auto Label = Label::createWithSystemFont("My Label", "fonts/Marker Felt.ttf", 25);
auto BtnItem = MenuItemLabel::create(Label, CC_CALLBACK_1(HelloWorld::myCallback, this));
Menu* mymenu = Menu::create(BtnItem, NULL);
mymenu->setPosition(Vec2(WinSize.width/2,WinSize.height/2));
this->addChild(mymenu,1);
void HelloWorld::myCallback(Ref* pSender)
{
CCLOG("Your Callback ");
}