Почему мой 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 ");
}
Другие вопросы по тегам