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

第一步:

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

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值