用cocos2dx3.1的MenuItemToggle写一个会跳动音乐开关按钮

来源:互联网 发布:生产进销存软件免费版 编辑:程序博客网 时间:2024/05/20 11:23

第一步:

在.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);

最后,在写一下这个音乐按钮的回调函数:

void HelloWorld::music(Ref * pSender)
{
 MenuItemToggle* h = (CCMenuItemToggle *)pSender;
 if (h->selectedItem() == musicon) {
  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

原创粉丝点击