- 精通Cocos2d-x游戲開發(進階卷)
- 王永寶
- 1109字
- 2020-11-28 22:37:01
4.4 聲音音效相關的經驗和技巧
最后分享一些在實際工作中積累下來的聲音播放相關的經驗和技巧。首先是聲音的管理,最好不要在代碼中直接使用聲音文件名,在配置表中為每個聲音文件定義一個ID,可以根據游戲邏輯來定義ID的規則,當需要播放聲音時,通過ID從配置表中找到聲音文件的路徑,然后播放,這種做法會帶來極大的便利。就像我們使用配置表來管理游戲中所有的文字,當需要將程序翻譯成其他語言時,需要做的工作就非常少了。
一般在我們的開發過程中,為游戲添加音效是很靠后的一個環節,添加的時候往往是找到代碼中各處需要播放聲音的地方,然后在里面添加一段代碼,讓聲音播放,但這種做法很不好管理。游戲的聲音播放一般有以下幾種情況,進入場景時播放(背景音樂),在動畫播放時播放,如玩家攻擊動畫,被攻擊動畫,或者按鈕點擊動畫,這些動畫播放的時候伴隨著音效。如果我們也為動畫添加相應的配置(如動畫1的配置中配置了音效1),并將播放動畫的接口進行封裝,那么就可以在播放動畫的時候自動播放音效了。
就算沒有動畫配置表(聲音配置表還是要的),也可以通過設計ID的規則來實現音效的自動播放,如角色、子彈等對象會有多個動畫,可以通過角色或子彈的ID乘以100,再加上動畫的ID,來獲得一個唯一ID。根據這個規則來定義聲音的ID,如子彈有一個飛行動畫,還有一個爆炸動畫,這一發子彈的ID為100,飛行和爆炸是子彈的兩種狀態,分別為1和2,那么可以把子彈的飛行音效和爆炸音效的ID定義為10001和10002,在播放動畫的時候,可以在播放動畫的通用接口中尋找對應的音效ID,找到了就播放該音效。使用這種方法,在一個項目中,僅添加了幾行代碼,就實現了成百上千個音效的自動化添加(聲音配置表由策劃填寫),如果這種方法讓你感到疑惑,那么請把這種方法當作一種思路,而不是一系列的步驟。
由于需要在不同的平臺使用不同的音頻格式,所以需要為每個平臺都準備一個目錄來存放這個平臺的聲音文件,如soundiOS、soundAndroid、soundWin32。然后使用預處理,在不同的平臺加載不同的聲音配置表,最后在打包的時候將其他平臺的目錄移除,這是使用配置表管理聲音文件的另一個好處,最關鍵的是大量音效的添加、移除和管理,都不需要對代碼進行大量的改動了。
另外還可以結合Cocos2d-x的特性來更好地播放聲音,例如,當需要延遲播放聲音,那么可以使用DelayTime這個Action。如果希望遠處的物體播放的聲音更小,那么可以將參考節點的坐標轉換成世界坐標,再判斷離屏幕正中間的距離來決定聲音播放時的音量,實現一個通用的聲音組件來掛載到角色身上,這也許是個不錯的主意。
最后如果Cocos2d-x引擎自帶的聲音引擎無法滿足需求,還可以使用FMod這個強大的聲音引擎來實現各種需求,官網地址是http://www.fmod.org/。
有興趣的讀者可參考使用fmod聲音引擎的Cocos2d-x游戲示例,網址為https://github.com/fmod/EarthWarrior3D。