cocos2dx3.0声音的使用下面做以详细说明

照旧,首先新建一个工程~(啥?怎么建?!。。。\,出门,往前找)

首先,要知道,cocos2d-x为音乐,音效等单独成立一个类,直接头文件包含过来即可——SimpleAudioEngine.h

 

里面的成员函数有:

——关于背景音乐:

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
//预加载背景音乐
SimpleAudioEngine::sharedEngine()->preloadBackgroundMusic(music/xxxx.mp3);
//开始播放背景音乐,true表示循环
SimpleAudioEngine::sharedEngine()->playBackgroundMusic(music/xxxx.mp3,true);
//停止背景音乐,这是一个缺省参数函数,传参表示是否释放音乐文件
SimpleAudioEngine::sharedEngine()->stopBackgroundMusic();
//暂停背景音乐
SimpleAudioEngine::sharedEngine()->pauseBackgroundMusic();
//重头调用背景音乐
SimpleAudioEngine::sharedEngine()->rewindBackgroundMusic();
//返回布尔型参数,表示是否在放着背景音乐
SimpleAudioEngine::sharedEngine()->isBackgroundMusicPlaying()
//设置音量0.0-1.0
SimpleAudioEngine::sharedEngine()->setBackgroundMusicVolume(0.5);

 

——关于音效

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//预加载音效
SimpleAudioEngine::sharedEngine()->preloadEffect(music/xxxx.mp3);
//开始播放背景音效,false表示不循环
SimpleAudioEngine::sharedEngine()->playEffect(music/xxxx.mp3,false);
//停止音效,可以选择单独停掉一个音效,这个值是由playEffect返回的
SimpleAudioEngine::sharedEngine()->stopEffect(m_nSoundId);
//停止全部音效
SimpleAudioEngine::sharedEngine()->stopAllEffects();
//暂停单个音效
SimpleAudioEngine::sharedEngine()->pauseEffect(m_nSoundId);
//重新开始音效
SimpleAudioEngine::sharedEngine()->resumeEffect(m_nSoundId);
//暂停全部音效
SimpleAudioEngine::sharedEngine()->pauseAllEffects();
//重新开始全部音效
SimpleAudioEngine::sharedEngine()->resumeAllEffects();
//设置音效音量0.0-1.0
SimpleAudioEngine::sharedEngine()->setEffectsVolume(0.5);
//卸载音效
SimpleAudioEngine::sharedEngine()->unloadEffect(music/xxxx.mp3);

其他的,看一看API文档吧\

 

 

要注意一下,光加了SimpleAudioEngine.h头文件还不管用,在调用函数时,

也要加CocosDenshion命名空间

 

?
1
using namespace CocosDenshion;
也可以在每个SimpleAudioEngine前面加 CocosDenshion::

 

 

加音乐,先加两个按钮,一个开关按钮,音乐的开与关,一个音效按钮,
本博文使用素材及代码,会在文章末尾给出。\

开关按钮,示意(有些简陋,见谅呀~。~):

\ \

开关按钮的定义:

 

?
1
2
3
4
5
6
7
8
9
10
11
12
// 添加 声音  的开关按钮
    MenuItemImage *_turnOn,*_turnOff;
    _turnOn = MenuItemImage::create(
        button_voi_on.png,
        button_voi_on.png);
    _turnOff = MenuItemImage::create(
        button_voi_off.png,
        button_voi_off.png);
    MenuItemToggle *toggleItem = MenuItemToggle::createWithCallback(CC_CALLBACK_1(HelloWorld::menuMusicCallback,this), _turnOn,_turnOff, NULL);
     
    toggleItem->setScale(0.3f);
    toggleItem->setPosition(Point(visibleSize.width/3,visibleSize.height/2));


 

很简单理解吧,定义两个按钮,按钮两个图片分别是 常规显示和点击时候的显示。

因为是开关按钮,要用MenuItemToggle来关联一下,别忘了在.h中声明回调函数哟。

下面两行,一个是我的图片资源太大了,缩小了一下,第二个就是放置的位置。

 

还有实现,音效的按钮,这次选的音乐是——经典中的经典 超级玛丽 的音乐,音效是 吃生命蘑菇的那个音效

当然,图片必须的用个大绿蘑菇啦~\

\

添加小蘑菇按钮:

 

?
1
2
3
4
5
6
7
// 添加小蘑菇按钮
   auto moguItem = MenuItemImage::create(
                                          mogu_1.png,
                                          mogu_2.png,
                                          CC_CALLBACK_1(HelloWorld::menuMoguCallback,this));
    
   moguItem->setPosition(Point(visibleSize.width*2/3,visibleSize.height/2));


 

然后,预加载背景音乐和音效:

 

?
1
2
3
// 预加载背景音乐和音效
SimpleAudioEngine::sharedEngine()->preloadBackgroundMusic(music/back_music.mp3); 
SimpleAudioEngine::sharedEngine()->preloadEffect(music/eat_mogu.mp3); 

其实,这一步不写也行,因为我们内容很少,可以直接去找,费时不多。

 

但如果以后东西多了,避免卡、慢,就需要预加载一下了。\

 

init里,先播放一下音乐:

 

?
1
2
3
4
// 先默认播放背景音乐
SimpleAudioEngine::sharedEngine()->playBackgroundMusic(music/back_music.mp3,true);
// bool类型,判断背景音乐是否暂停
isPause=false;

这里的isPause是在头文件中定义的,用处是判断音乐是否已暂停。

 

 

两个回调函数:

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
voidHelloWorld::menuMusicCallback( cocos2d::Ref* pSender )
{
    if( isPause==false)
    {
        SimpleAudioEngine::sharedEngine()->pauseBackgroundMusic();
        isPause=true;
    }
    else
    {
        SimpleAudioEngine::sharedEngine()->resumeBackgroundMusic();
        isPause=false;
    }
}
 
voidHelloWorld::menuMoguCallback( cocos2d::Ref* pSender )
{
    SimpleAudioEngine::sharedEngine()->playEffect(music/eat_mogu.mp3); 
}

如果,足够细心,会发现,SimpleAudioEngine里有函数来显示,当前背景音乐是否播放:

 

 

?
1
2
//返回布尔型参数,表示是否在放着背景音乐
SimpleAudioEngine::sharedEngine()->isBackgroundMusicPlaying()

为什么,要设置一个变量来管理呢?\

 

这个,我当时在这出了问题,后来往前一直找,发现,