开关菜单是MenuItemToggle类实现的,它是一种可以进行两种状态切换的菜单。它可以通过下面的函数创建:
- static MenuItemToggle*createWithCallback (
- const ccMenuCallback & callback, //菜单操作的回调函数指针
- MenuItem * item, //进行切换的菜单项
- ...
- )
从第二个参数开始都是MenuItem类的实例对象,它们是开关菜单显示的菜单项,它们可以是文本、图片和精灵类型的菜单项,但是最后不用忘记NULL结尾。
下面代码是简单形式的文本类型的开关菜单:
- auto toggleMenuItem =MenuItemToggle::createWithCallback(
- CC_CALLBACK_1(HelloWorld::menuItem1Callback,this),
- MenuItemFont::create("On" ),
- MenuItemFont::create("Off"),
- NULL );
- Menu* mn = Menu::create(toggleMenuItem,NULL);
- this->addChild(mn);
下面我们通过一个实例介绍一下其它的复杂类型的开关菜单的使用,这个实例如下图所示,是一个游戏音效和背景音乐设置界面,我们可以通过开关菜单实现这个功能,我们的美术设计师为每一个设置项目(音效和背景音乐)分别准备了两个图片。
下面我们看看实例代码的实现,HelloWorldScene.cpp中使用MenuItemSprite菜单项的代码如下:
- bool HelloWorld::init()
- {
- if ( !Layer::init() )
- {
- return false;
- }
- Size visibleSize = Director::getInstance()->getVisibleSize();
- Point origin = Director::getInstance()->getVisibleOrigin();
- Sprite *bg = Sprite::create("menu/background.png");
- bg->setPosition(Point(origin.x + visibleSize.width/2,
- origin.y +visibleSize.height /2));
- this->addChild(bg);
- //音效
- auto soundOnMenuItem = MenuItemImage::create(
- "menu/on.png",
- "menu/on.png"); ①
- auto soundOffMenuItem = MenuItemImage::create(
- "menu/off.png",
- "menu/off.png"); ②
- auto soundToggleMenuItem = MenuItemToggle::createWithCallback(
- CC_CALLBACK_1(HelloWorld::menuSoundToggleCallback,this),
- soundOnMenuItem,
- soundOffMenuItem,
- NULL); ③
- soundToggleMenuItem->setPosition(
- Director::getInstance()->convertToGL(Point(818,220)));
- //音乐
- auto musicOnMenuItem =MenuItemImage::create(
- "menu/on.png",
- "menu/on.png"); ④
- automusicOffMenuItem =MenuItemImage::create(
- "menu/off.png",
- "menu/off.png"); ⑤
- auto musicToggleMenuItem = MenuItemToggle::createWithCallback(
- CC_CALLBACK_1(HelloWorld::menuMusicToggleCallback,this),
- musicOnMenuItem,
- musicOffMenuItem,
- NULL ); ⑥
- musicToggleMenuItem->setPosition(
- Director::getInstance()->convertToGL(Point(818,362)));
- //Ok按钮
- autookMenuItem = MenuItemImage::create(
- "menu/ok-down.png",
- "menu/ok-up.png");
- okMenuItem->setPosition(Director::getInstance()->convertToGL(Point(600,510)));
- Menu* mn = Menu::create(soundToggleMenuItem,
- musicToggleMenuItem,okMenuItem, NULL); ⑦
- mn->setPosition(Point::ZERO);
- this->addChild(mn);
- return true;
- }
在上面代码第①是创建音效开的图片菜单项,第②行是创建音效关的图片菜单项,第③行代码是通过createWithCallback函数创建开关菜单项MenuItemToggle。类似的第④~⑥创建了背景音乐开关菜单项。第⑦行代码是通过上面创建的开关菜单项创建Menu对象。