首页 > 代码库 > 实例介绍Cocos2d-x开关菜单

实例介绍Cocos2d-x开关菜单

开关菜单是MenuItemToggle类实现的,它是一种可以进行两种状态切换的菜单。它可以通过下面的函数创建:

 

[html] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. static MenuItemToggle*createWithCallback  (         
  2.          const ccMenuCallback &      callback,            //菜单操作的回调函数指针  
  3.          MenuItem *    item,                                          //进行切换的菜单项  
  4.     ...  
  5. )    

 

 

从第二个参数开始都是MenuItem类的实例对象,它们是开关菜单显示的菜单项,它们可以是文本、图片和精灵类型的菜单项,但是最后不用忘记NULL结尾。

下面代码是简单形式的文本类型的开关菜单:

 

[html] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. auto toggleMenuItem =MenuItemToggle::createWithCallback(  
  2.                                         CC_CALLBACK_1(HelloWorld::menuItem1Callback,this),  
  3.                        MenuItemFont::create("On" ),  
  4.                        MenuItemFont::create("Off"),  
  5.                        NULL );     
  6. Menu* mn = Menu::create(toggleMenuItem,NULL);  
  7. this->addChild(mn);  

 

下面我们通过一个实例介绍一下其它的复杂类型的开关菜单的使用,这个实例如下图所示,是一个游戏音效和背景音乐设置界面,我们可以通过开关菜单实现这个功能,我们的美术设计师为每一个设置项目(音效和背景音乐)分别准备了两个图片。

 

 

下面我们看看实例代码的实现,HelloWorldScene.cpp中使用MenuItemSprite菜单项的代码如下:

 

[html] view plaincopy在CODE上查看代码片派生到我的代码片
 
  1. bool HelloWorld::init()  
  2. {  
  3.    if ( !Layer::init() )  
  4.    {  
  5.        return false;  
  6.    }  
  7.      
  8.    Size visibleSize = Director::getInstance()->getVisibleSize();  
  9.    Point origin = Director::getInstance()->getVisibleOrigin();  
  10.    
  11.    Sprite *bg = Sprite::create("menu/background.png");  
  12.    bg->setPosition(Point(origin.x + visibleSize.width/2,  
  13.                              origin.y +visibleSize.height /2));  
  14.    this->addChild(bg);  
  15.    
  16.     //音效  
  17.    auto soundOnMenuItem = MenuItemImage::create(  
  18.                             "menu/on.png",  
  19.                             "menu/on.png");                                                                        ①  
  20.    auto soundOffMenuItem = MenuItemImage::create(  
  21.                             "menu/off.png",  
  22.                             "menu/off.png");                                                                        ②  
  23.      
  24.    auto soundToggleMenuItem = MenuItemToggle::createWithCallback(  
  25.                        CC_CALLBACK_1(HelloWorld::menuSoundToggleCallback,this),  
  26.                                                                             soundOnMenuItem,  
  27.                                                                             soundOffMenuItem,  
  28.                                                                             NULL);                                                            ③  
  29.    
  30.         soundToggleMenuItem->setPosition(  
  31.                                                          Director::getInstance()->convertToGL(Point(818,220)));  
  32.      
  33.    //音乐  
  34.    auto musicOnMenuItem  =MenuItemImage::create(  
  35.                             "menu/on.png",  
  36.                             "menu/on.png");                                                                        ④  
  37.         automusicOffMenuItem  =MenuItemImage::create(  
  38.                             "menu/off.png",  
  39.                             "menu/off.png");                                                                        ⑤  
  40.    auto musicToggleMenuItem = MenuItemToggle::createWithCallback(  
  41.                                  CC_CALLBACK_1(HelloWorld::menuMusicToggleCallback,this),  
  42.                                                    musicOnMenuItem,  
  43.                                                    musicOffMenuItem,  
  44.                                                    NULL );                                        ⑥  
  45.         musicToggleMenuItem->setPosition(  
  46.                                                          Director::getInstance()->convertToGL(Point(818,362)));  
  47.    
  48.     //Ok按钮  
  49.         autookMenuItem  = MenuItemImage::create(  
  50.                             "menu/ok-down.png",  
  51.                             "menu/ok-up.png");  
  52.         okMenuItem->setPosition(Director::getInstance()->convertToGL(Point(600,510)));  
  53.     
  54.    Menu* mn = Menu::create(soundToggleMenuItem,  
  55.                                                   musicToggleMenuItem,okMenuItem, NULL);                                   ⑦  
  56.    
  57.    mn->setPosition(Point::ZERO);  
  58.    this->addChild(mn);  
  59.      
  60.    return true;  
  61. }  

 

 

在上面代码第①是创建音效开的图片菜单项,第②行是创建音效关的图片菜单项,第③行代码是通过createWithCallback函数创建开关菜单项MenuItemToggle。类似的第④~⑥创建了背景音乐开关菜单项。第⑦行代码是通过上面创建的开关菜单项创建Menu对象。