首先,要想使用音效,需要啟用音效引擎庫CocosDenshion中的SimpleAudioEngine類,
#include "SimpleAudioEngine.h"
CocosDenshion引擎庫實際上是對系統音頻API的封裝,因此它支持的音頻文件格式與平台有關。具體不同平台的格式支持請查閱資料,通常我們就用各個平台都支持的格式,音樂:mp3;音效:wav。
具體的使用做一個簡單的介紹,比較簡單:
音樂:同一時間,只能有一個背景音樂在播放。
void preloadBackgroundMusic( 音樂文件); //加載音樂 void playBackgroundMusic( 音樂文件, bool); //播放音樂, true代表循環播放, false代表不循環 void pauseBackgroundMusic(); //暫停 void resumeBackgroundMusic(); //繼續 void stopBackgroundMusic(); //停止 void rewindBackgroundMusic(); //從頭播放 bool isBackgroundMusicPlaying(); //是否正在播放 void setBackgroundMusicVolume(); //設置音量 float getBackgroundMusicVolume(); //獲取音量
聲音:與音樂不同的是,同一時間可以有多個音效在播放,引擎在播放音效的時候會返回該次播放音效的ID,方便之後的控制。
void preloadEffect( 音效文件 ) void unloadEffect( 音效文件 ) int playEffect( 音效文件, 是否重復 ) //返回一個音效id作為標識 void stopEffect( 音效ID ) void stopAllEffects() void pauseEffect( 音效ID ) void pauseAllEffects() void resumeEffect( 音效ID ) void resumeAllEffects() float getEffectsVolume() void setEffectsVolume()
這裡呢,在播放音效的時候需要指定是否循環播放,默認是不循環。音效還有一點,就是沒有“是否正在播放”的判斷,如果需要判斷的話,需要該引擎底層,自己仿照音樂播放判斷的方式寫一個。
SimpleAudioEngine是個單例類,使用方式:SimpleAudioEngine::sharedEngine()->playEffect( 音效文件 );
注意:
播放背景音樂前,一定要提前加載背景音樂文件,音效不需要。
在退出後且不再需要音樂時,要調用end()方法來釋放引擎占用的資源。
先用preloadBackgroundMusic加載一下音樂再試試看,另外背景音樂請使用mp3格式的。如果還不行的話,很小的可能是你的mp3格式不標准,可以使用轉換工具重新進行下轉換然後再試試應該就可以解決問題了。還有就是注意音樂所在的位置是否正確。
檢查AppDelegate::applicationDidEnterBackground 和AppDelegate::applicationWillEnterForeground兩個函數中的操作,第一個是程序進入後台後的操作,第二個是程序返回前台後的操作