2013-11-21 2 views
0

Привет, я конвертирую свою игру из Corona SDK в Cocos2d-x 3.0 alpha.Cocos2d-x как создать кнопку изображения с заголовком и шрифтом

Мне нужно создать кнопку изображения с текстом на нем. Это было очень просто в Corona SDK с widget.newButton, который принимает все x, y, size, font, image и т. Д. В одной функции.

Теперь я не мог найти альтернативы этому в Cocos2d-x. Ближе всего я нашел в нем MenuItemImage

auto closeItem = MenuItemImage::create(
            "blank.png", 
            "blank-selected.png", 
            CC_CALLBACK_1(HelloWorld::menuCloseCallback, this)); 

closeItem->setPosition(Point(origin.x + visibleSize.width - closeItem->getContentSize().width/2 , origin.y + closeItem->getContentSize().height/2)); 

auto menu = Menu::create(closeItem, NULL); 
menu->setPosition(Point::ZERO); 
this->addChild(menu, 1); 

Он принимает images и event, но я не могу установить title и font на нем. У кого-нибудь есть идея, как установить заголовок и шрифт на нем?

ответ

5

Вы можете использовать MenuItemFont или MenuItemLabel.

Например:

MenuItemFont::setFontName("Marker Felt"); 
MenuItemFont::setFontSize(34); 

auto label = LabelBMFont::create("go back", "fonts/bitmapFontTest3.fnt"); 
auto back = MenuItemLabel::create(label, CC_CALLBACK_1(MenuLayer4::backCallback, this)); 

или

MenuItemFont::setFontSize(34); 
MenuItemFont::setFontName("Marker Felt"); 
auto item6 = MenuItemFont::create("Bugs", CC_CALLBACK_1(MenuLayerMainMenu::menuCallbackBugsTest, this)); 

Для получения дополнительной информации см MenuTest.ccp


обновление

Вы можете просто новых ярлык, и добавить его к вам MenuItemImage, такие как:

LabelTTF* closeLabel = LabelTTF::create("close", "Marker Felt", 28); 
closeItem->addChild(closeLabel); 

И вы, возможно, потребуется отрегулировать положение лейбла.

+0

спасибо за ответ, но как установить изображение в этом примере? Согласно моему вопросу, мне нужен способ создания изображения с заголовком и шрифтом на нем. Я создал «пустой» образ, который нужно использовать через приложение. Мне просто нужно добавить заголовок с кодом. – Khawar

+0

@Khawar обновлен – pktangyue

+0

, поэтому вы имеете в виду, что мне нужно создать LabelTTF и MenuItemImage отдельно и отрегулировать позиции для обоих? – Khawar

0

Это довольно просто, это работает, по крайней мере, в cocos2d-x 3.10 и 3.16, но если вы хотите сделать кнопку с cocos2d, используйте встроенное пространство имен cocos2d::ui для Button.

cocos2d::ui::Button* button = cocos2d::ui::Button::create(); 
//button textures 
button->loadTextures(
     "<your default texture>.png", 
     "<your pressed texture>.png", 
     "<your disabled texture>.png", 
     cocos2d::ui::Widget::TextureResType::PLIST 
    ); 

//text content, font, and size 
button->setTitleText("Touch me!"); 
button->setTitleFontName("arial"); 
button->setTitleFontSize(24.0f); 

//bind a callback with a lambda 
auto touch_handler = [](cocos2d::Ref* ref, cocos2d::ui::Widget::TouchEventType evt) 
{ 
    if (evt == cocos2d::ui::Widget::TouchEventType::ENDED) 
    { 
     //do your callback logic here, ie play a sound or vibrate 
    } 
}; 
button->addTouchEventListener(touch_handler); 

//then finally, like a Nodes, add it to your scene 
my_scene->addChild(button); 

Текстуры вы будете загружать идеально упакованы в текстуру с чем-то вроде TexturePacker, в противном случае вы измените его на LOCAL вместо PLIST. Текстуры будут использоваться, когда кнопка по умолчанию, или когда есть прикосновение, или когда кнопка отключена.

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