下面我们就来详细的说下关于cocos2dx 菜单按钮,下面我会贴出详细的代码来供大家参考和学习,有些不对的地方大家可以在社区里面留言,我会做一个详细的解答。

1,在没有图片资源的情况下,如果想要创建一个只有字体的Menu按钮,看如下代码的创建步骤:

  1. CCLabelTTF *label = CCLabelTTF::create("Exit",  "Arial", 20); // create a exit botton  
  2. CCMenuItemLabel *exit_game = CCMenuItemLabel::create(label, this, menu_selector(HelloWorld::menuExitGame) );  
  3. exit_game->setPosition(CCPointZero);  
  4. exit_game->setPosition(size.width -40, size.height - 40); // add an exit  button  
  5. CCMenu* pMenu = CCMenu::create( exit_game,NULL); //最后添加进去,就创建成功了 

2,我需要用图片资源来创建自己风格的Menu菜单,代码如下:

  1. CCMenuItemImage *pCloseItem = CCMenuItemImage::create(  
  2.            "NextLayeNormal.png", //png.jpg等图片格式都是可以的  
  3.            "NextLayeSelected.png",  
  4.            this,  
  5.            menu_selector(HelloWorld::menuCallback));  
  6.        CC_BREAK_IF(! pCloseItem);  
  7.        pCloseItem->setPosition(ccp(CCDirector::sharedDirector()->getWinSize().width - 70, 30));  

  8. CCMenu* pMenu = CCMenu::create( <span style="font-family: Arial, Helvetica, sans-serif;">pCloseItem </span>,NULL); //最后添加进去,就创建成功了  


  1. 以上是两种创建menu菜单的方式,还有另外几种方式,CCLabelAtlas,CCMenuItemFont
  2. [cpp] view plaincopy在CODE上查看代码片派生到我的代码片
  3. CCLabelAtlas *plabelAtals = CCLabelAtlas::create("0123456789", "labelatlas.png", 16, 24, '.');  
  4. plabelAtals->setColor(ccc3(250, 100, 0));  
  5. CCMenuItemLabel *atalsMenu = CCMenuItemLabel::create(plabelAtals, this, menu_selector(MenuDemo::font_callBack));  
  6. atalsMenu->setPosition(ccp(size.width / 3, size.height / 2));  
  7. CCMenu *menu = CCMenu::create(atalsMenu, NULL);  
  8. menu->setPosition(CCPointZero);  
  9.   
  10.   
  11. CCMenuItemFont::setFontName("Marker Felt");  
  12. CCMenuItemFont *menufont = CCMenuItemFont::create("My test Menu", this, menu_selector(MenuDemo::menuCallbackPriorityTest));  
  13. menufont->setColor(ccc3(250, 100, 0));  
  14. menufont->setPosition(ccp(size.width - 200, size.height / 2));  
  15. menu->setPosition(CCPointZero);  
  16. menu->addChild(menufont, 1);  
  17.   
  18.  this->addChild(menu, 1);  

采用CCMenuItemToggle来创建开关菜单,例子代码如下:


  1. void MyMenuItemToggleLayer::initLayer() {  
  2.     CCSize size = CCDirector::sharedDirector()->getWinSize();  
  3.     CCSprite *bg = CCSprite::create("BG.jpg");  
  4.     bg->setPosition(ccp(size.width / 2.0f, size.height / 2.0f));  
  5.     this->addChild(bg, 1);  
  6.     CCMenuItemFont::setFontName( "Marker Felt" );  
  7.     CCMenuItemFont::setFontSize(34);  
  8.     CCMenuItemFont *on = CCMenuItemFont::create("On", this, menu_selector(MyMenuItemToggleLayer::onCallBack));  
  9.     on->setPosition(ccp(400, 400));  
  10.     CCMenuItemFont *create = CCMenuItemFont::create("Create", this, menu_selector(MyMenuItemToggleLayer::createCallBack));  
  11.     create->setPosition(ccp(500, 500));  
  12.     CCMenuItemToggle *toggle = CCMenuItemToggle::create(   this,  
  13.                                                                                         menu_selector(MyMenuItemToggleLayer::CallBack),  
  14.                                                                                         on,  
  15.                                                                                         create,  
  16.                                                                                         NULL);  
  17.     toggle->setColor(ccc3(255, 0 ,0));  
  18.     toggle->setPosition(ccp(size.width / 2.0f, size.height / 2.0f));  
  19.     CCMenu *menu = CCMenu::create(toggle, NULL);  
  20.     menu->setPosition(CCPointZero);  
  21.     this->addChild(menu, 2);  
  22.                                                                                           
  23. }