2015-12-10 1 views
0

Hey, je ne trouve pas de réponse à ce sujet partout. Je veux changer la couleur de police de mon menuItemLabel quand on le touche. Par défaut, il redimensionne et anime pour être plus grand lorsque vous le touchez pour la première fois, mais comment le personnaliser davantage? Voici mon label et menuitem:Changer le menuItemLabel couleur au démarrage tactile

//add options label 
optionsLabelSettings = Label::createWithTTF("OPTIONS", "fonts/font1.ttf", 140); 
optionsLabelSettings->setColor(Color3B(255,255,255)); 
auto optionsItem = MenuItemLabel::create(optionsLabelSettings, CC_CALLBACK_1(MainMenuScene::GoToOptionsScene, this)); 
optionsItem->setPosition(Point (visibleSize.width/2 + origin.x, visibleSize.height /2)); 

//add menu 
auto menu = Menu::create(optionsItem, NULL); 
menu->setPosition(Point(0,0)); 
this->addChild(menu); 

Répondre

0

Si vous voulez changer la couleur de police, vous pouvez insérer cette méthode dans votre gestionnaire:

void MainMenuScene::GoToOptionsScene(parameters) 
{ 
optionsItem->getLabel()->setColor(Color3B::BLACK); // or any other color 
… // your method of switching to another scene 
} 

Si vous passez à une autre scène après avoir appuyé sur, il sera D'accord.
Mais si vous prévoyez de rester sur la scène actuelle, cette méthode ne convient pas, car vous ne pouvez pas restaurer la couleur de la police. Dans ce cas, mieux utilise MenuItemImage et la création d'images pour les états normaux et sélectionnés

MenuItemImage *optionsItem = MenuItemImage::create(«normalImage.png», «selectedImage.png», CC_CALLBACK_1(MainMenuScene::GoToOptionsScene, this)); 

Ou en utilisant ui :: Button, si vous ne l'avez pas des images:

ui::Button* optionsItem = ui::Button::create(); 
    optionsItem->setPosition(…); 
    optionsItem->setTitleText(«OPTIONS»); 
    optionsItem->setTitleFontName("fonts/font1.ttf"); 
    optionsItem->setTitleFontSize(140); 
    optionsItem->setTitleColor(Color3B::WHITE); 
    optionsItem->addTouchEventListener([&](Ref* sender, Widget::TouchEventType type){ 
     switch (type) 
     { 
      case ui::Widget::TouchEventType::BEGAN: 
       this->startPressingGoToOptionsScene(); 
       break; 
      case ui::Widget::TouchEventType::ENDED: 
       this->finishPressingGoToOptionsScene(); 
       break; 
      default: 
       break; 
     } 
    }); 
    this->addChild(optionsItem); 

puis dans chaque gestionnaire définir le comportement de bouton différent:

void MainMenuScene::startPressingGoToOptionsScene(parameters) 
{ 
optionsItem->setTitleColor(Color3B::BLACK); 
optionsItem->setTitleText(«…») // change anything else 
… 
} 

void MainMenuScene::finishPressingGoToOptionsScene(parameters) 
{ 
optionsItem->setTitleColor(Color3B::WHITE); // return original font color and other changes 
… 
} 
0
customise your MenuItemLabel class & Implement following two methods :- 

class ChangedMenuItemLabel : MenuItemLabel 
{ 
bool ChangedMenuItemLabel::initWithLabel(cocos2d::Node *label, const ccMenuCallback &callback) 
{ 
    if (!MenuItemLabel::initWithLabel(label,callback)) { 
     return false; 
    } 
    return true; 
} 
void selected(){ 
this->setColor("your color"); 
} 
void unselected(){ 
this->setColor("your color");//or nothing 
} 
}