游戲開發(fā)中的音樂和音效怎么去制作
游戲開發(fā)中分背景音樂和音效,同時每個游戲的設(shè)置里面都會有開關(guān),是否開關(guān)音樂和音效,所以我們做音樂管理模塊的時候都要充分的考慮進去。Cocos Creator提供了一個AudioSource組件用來播放音樂或音效,我們整個聲音管理模塊就利用它來支撐最終的音樂音效的播放。
我們創(chuàng)建一個音樂管理的單例組件類, 在框架初始化的時候,我們把它實例化出來,加到GameApp這個節(jié)點上。然后調(diào)用管理類單例的Init接口,在Init接口中,往GameApp節(jié)點上添加一些AudioSource的組件實例。添加幾個,可以根據(jù)設(shè)計來決定,可以動態(tài)的擴展,也可以寫死固定的幾個AudioSource,這樣整個游戲就固定了能支持多少個音效同時播放。我在這個項目里面設(shè)置了一個MAX_SOUNDS為8。背景音樂專門有一個單獨放置AudioSource組件用來播放。同時我們要從本地獲取用戶的設(shè)置,看看是否禁止播放背景音樂和音效。所以聲音管理類的數(shù)據(jù)成員如圖

MAX_SOUNDS: 最大能支持的同時播放的音效的數(shù)目,目前是8,如果是第9個音效播放的話,就會把原來的第0個給沖掉。
MUSIC_MUTE_KEY: 從本地讀取背景是否音樂靜音的key,用這個key去從本地讀取配置;
SOUND_MUTE_KEY: 從本地讀取音效是否靜音的key, 用這個key從本地讀取配置;
nowIndex: 當(dāng)前音效使用到了第幾個音效組件實例,如果超過MAX_SOUNDS,又從0開始,每次播放一個音效nowIndex會往后+1, 這樣8個AudioSource組件輪流播放音效,最多同時支持8個音效。如果超過8個,又從第0個開始;
sounds: 音效的所有AudioSource組件集合;
bgMusic: 播放背景音樂的AudioSource組件;
isMusicMute: 背景音樂是否靜音,初始值從本地配置讀取;
isSoundMute: 音效是否靜音, 初始值從本地配置讀取;
在Init函數(shù)里面我們初始化對應(yīng)的AudioSource組件實例和相關(guān)參數(shù),如代碼截圖:

28~31行for循環(huán),將AudioSource組件實例創(chuàng)建出來,并加入到節(jié)點(GameApp)上。33行創(chuàng)建播放背景音樂的AudioSource聲音組件的實例。36~45行從本地讀取是否靜音的初始值。
接下來分析一下播放音樂音效的接口playBgMusic/stopBgMusic,

playBgMusic:
clip: 函數(shù)參數(shù),聲音資源對象;
isLoop: 函數(shù)參數(shù),是否循環(huán)播放;
進入函數(shù)后,將聲音clip設(shè)置到背景音樂的AudioSource組件實例上,如果是靜音,就把聲音的大小調(diào)成0,然后調(diào)用AudioSource組件的play函數(shù)。
stopBgMusic: 直接調(diào)用背景音樂組件實例的停止接口,停止播放。
接下來分析接口playSound,如圖

如果當(dāng)前音效靜音,直接返回不播放,否者以當(dāng)前nowIndex為索引的AudioSource來播放聲音,然后再nowIndex++, 下一次播放音效就到下一個AudioSource組件了。如果nowIndex超過了最大的數(shù)目,又從0開始,這樣最早的那個音效就會被沖掉,因為游戲音效本身時間就短,所以這種設(shè)計方式也是可以的,簡單方便。
接下來分析接口setMusicMute/setSoundMute

當(dāng)用戶在設(shè)置界面設(shè)置音樂音效是否靜音的時候,可以調(diào)用這兩個函數(shù),設(shè)置變量值,然后再把最新的變量值保存到本地存儲,下次游戲啟動的時候能獲取上一次保存的值。
本節(jié)的聲音管理模塊設(shè)計就講解到這里,大家可以對著代碼來閱讀,掌握鞏固好這些代碼。
歡迎加入我的游戲開發(fā)交流群,
給你分享更多游戲源碼及其他學(xué)習(xí)素材