第一步:
在.h文件中声明三个全局变量,和一个菜单的回调函数即:
MenuItemImage* musicon;
MenuItemImage* musicoff;
MenuItemToggle* h;
void music(Ref* pSender);
第二步:
到.cpp文件中初始化那三个全局变量:
musicon = MenuItemImage::create("musicon.png", "musicon.png");
musicoff = MenuItemImage::create("musicoff.png", "musicoff.png");
然后组合一下这两个按钮:
h = MenuItemToggle::createWithCallback(CC_CALLBACK_1(HelloWorld::music, this), musicon, musicoff, NULL);
h->setPosition(visibleSize/2);
//这一步是可以让按钮在播放音乐时显示musicon,关闭音乐时显示的是musicoff
if(SimpleAudioEngine::getInstance()->isBackgroundMusicPlaying())
{
h->setSelectedIndex(0);
}
else{
h->setSelectedIndex(1);
}
第三步:把它加到菜单里:
Menu* menu = Menu::create(h, NULL);
menu->setPosition(Vec2::ZERO);
addChild(menu);
最后,在写一下这个音乐按钮的回调函数:
{
MenuItemToggle* h = (CCMenuItemToggle *)pSender;
SimpleAudioEngine::getInstance()->playBackgroundMusic("7651.mp3", true);
UserDefault::getInstance()->setBoolForKey("musicOff", false);
else if (h->selectedItem() == musicoff) {
SimpleAudioEngine::getInstance()->pauseBackgroundMusic();
UserDefault::getInstance()->setBoolForKey("musicOff", true);
}
}
到这里这个按钮还不可以跳动,接下来就告诉你该怎么做。
第一步:在.h文件中重载系统的update函数:
int i;
virtual void update(float t);
第二步:在.cpp文件中写update函数:
i++;
//表示3秒跳动一次
if (i%180==0) {
auto mo = MoveTo::create(0.5, Vec2(h->getPosition().x, h->getPosition().y + 30));
auto mo2 = MoveTo::create(0.5, Vec2(h->getPosition().x, h->getPosition().y ));
auto mo3 = MoveTo::create(0.3, Vec2(h->getPosition().x, h->getPosition().y + 15));
auto mo4 = MoveTo::create(0.3, Vec2(h->getPosition().x, h->getPosition().y ));
Sequence* act = Sequence::create(mo, mo2 ,mo3,mo4,NULL);
h->runAction(act);
}
最后的最后在init()方法里加上scheduleUpdate()就可以了。
最后要提醒的是要播放音乐要加上SimpleAudioEngine.h这个头文件和using namespace CocosDenshion