开关菜单是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);


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

实例介绍Cocos2d-x开关菜单_ico 

以下我们看看实例代码的实现,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)));

//Okbutton
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对象。






欢迎关注智捷iOS课堂微信公共平台

实例介绍Cocos2d-x开关菜单_ico_02