UI在游戏中占有很重要的地位,但吸引玩家的除了这些看得到的界面和动画之外,游戏在后台中播放的背景音乐及游戏中打击、动作等音效的配合则会让游戏更受玩家的喜爱。在Cocos2D-X中也为我们封装了一个跨平台的、播放音频相关的类SimpleAudioEngine。

 

 

一、音乐与音效

 

    由于Cocos2D-X是跨平台的引擎,所以如果大家想通过一套代码多平台通用播放音乐与音效,可以通过Cocos2D-X定义的宏CC_TARGET_PLATFORM平台变量来区别播放的音频格式。比如,Android只支持ogg的音频格式。

    SimpleAudioEngine的使用比较简单,此类不需要创建,只需要调用其中的播放、暂停、重复播放等与音乐、音效相关的函数即可。

 

 

二、音乐与音效的相关函数

 

1、音乐相关的函数

 

<1> preloadBackgroundMusic:(NSString *) filePath

作用:预加载背景音乐文件。

参数:音乐文件的相对路经。

 

<2> playBackgroundMusic:(NSString *) filePath loop:(BOOL) loop

作用:播放背景音乐文件。

参数1:音乐文件的相对路经。

参数2:是否重复播放。

 

<3> stopBackgroundMusic()

作用:停止背景音乐。

 

<4> pauseBackgroundMusic()

作用:暂停背景音乐。

 

<5> resumeBackgroundMusic()

作用:继续播放背景音乐。

 

<6> rewindBackgroundMusic()

作用:倒带到音乐刚开始。

 

<7> isBackgroundMusicPlaying()

作用:获取当前背景音乐是否正在播放中。

 

<8> float getBackgroundMusicVolume()

作用:获取当前背景音乐的音量。

返回值:其音量范围[0.0,1.0]。

 

<9> setBackgroundMusicVolume(float volume)

作用:设置当前背景音乐的音量。

返回值:其音量范围[0.0,1.0]。

 

2、音效相关的函数

 

<1> preloadEffect(const char * pszFilePath)

作用:预设加载音效。

参数:音效文件的相对路经。

 

<2> unloadEffect(const char * pszFilePath)

作用:释放音效文件。

参数:音效文件的相对路经。

 

<3> unsigned int preloadEffect(const char * pszFilePath,bool bLoop)

作用:播放音效文件。

参数1:音效文件的相对路经。

参数2:是否重复播放。

返回值:为播放的音效生成ID。

 

<4> stopEffect(unsigned int nSoundId)

作用:停止音效播放。

参数:需要停止音效的ID。

 

<5> pauseEffect(unsigned int nSoundId)

作用:暂停音效播放。

参数:需要暂停音效的ID。

 

<6> resumeEffect(unsigned int nSoundId)

作用:继续音效播放。

参数:需要继续播放音效的ID。

 

<7> float getEffectsVolume(unsigned int nSoundId)

作用:获取音效音量。

参数:音效音量范围[0.0,1.0]。

 

<8> setEffectsVolume(float volume)

作用:设置音效音量。

参数:音效音量范围[0.0,1.0]。

 

<9> pauseAllEffects()

作用:暂停所有音效。

 

<10> resumeAllEffects()

作用:继续播放所有音效。

 

<11> stopAllEffects()

作用:停止所有音效。


三、音乐数据的预加载


   一般在类似于LoadingScene等起过渡功能的场景中提前加载真正的使用场景所使用的声音数据。当然,一次加载所有声效,还是先加载部分,还要根据具体情况而定。


四、音乐数据卸载


  什么时机卸载音乐数据也是一个值得研究的问题。在某些时机可能通过现场分析来调用stopEffect这样的函数把确实不需要的部分声效卸载掉。