在手机游戏中,一般都会有类似音乐开关这样的按钮,当按钮显示“On”时,按下去音乐会打开,并且按钮显示改变为“Off”。在Cocos2d-x中,用CCMenuItemToggle实现这种开关按钮。接下来我们来学习一下它的使用方法。
首先新建一个项目。命名为“ToggleMenuTest”,然后我们从TestCpp示例项目的Resource目录下将我们需要的background.mp3文件复制到我们新建的项目的Resource目录下。
然后修改HelloWorld.cpp文件的init方法如下:
bool HelloWorld::init()
{
bool bRet = false;
do
{
//开启背景音乐
SimpleAudioEngine::sharedEngine()->playBackgroundMusic("background.mp3",true);
//创建开关按钮选项,并设置回调函数
CCMenuItemToggle* toggleItem = CCMenuItemToggle::createWithTarget(this,
menu_selector(HelloWorld::togglemenuCallBack),
CCMenuItemFont::create( "On" ),
CCMenuItemFont::create( "Off"),
NULL );
//根据背景音乐是否播放来决定显示“On”或“Off”
if (SimpleAudioEngine::sharedEngine()->isBackgroundMusicPlaying())
{
toggleItem->setSelectedIndex(1);
}
else
{
toggleItem->setSelectedIndex(0);
}
//创建菜单
CCMenu *menu = CCMenu::create(toggleItem,NULL);
//加入到布景中
this->addChild(menu);
bRet = true;
} while (0);
return bRet;
}
我们要在.cpp文件的开头引入命名空间CocosDenshion,代码如下:
using namespace CocosDenshion;
然后实现开关按钮的回调函数,在HelloWorld.h文件中声明此函数
void togglemenuCallBack(CCObject* pSender);
在.cpp里添加函数的实现,代码如下:
//CCMenuItemToggle的回调方法
void HelloWorld::togglemenuCallBack(CCObject* pSender)
{
//创建临时CCMenuItemToggle
CCMenuItemToggle* temp=(CCMenuItemToggle*)pSender;
//根据CCMenuItemToggle的选项来决定音乐的开关
if (temp->getSelectedIndex()==0)
{
//暂停播放音乐
SimpleAudioEngine::sharedEngine()->pauseBackgroundMusic();
}
if (temp->getSelectedIndex()==1)
{
//继续播放音乐
SimpleAudioEngine::sharedEngine()->resumeBackgroundMusic();
}
}
运行,音乐会根据开关来播放和暂停。