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这样的函数把确实不需要的部分声效卸载掉。