一文教你Cocos Creator如何實(shí)現(xiàn)音頻池工具的封裝
引言
關(guān)鍵詞:音效管理、音頻池、Cocos Creator
多媒體內(nèi)容(文本、音頻、視頻、圖片、動(dòng)畫(huà)等)是一款應(yīng)用能否在“同質(zhì)化”嚴(yán)重的市場(chǎng)中脫穎而出的關(guān)鍵。
本文將封裝一個(gè)音頻池組件,以期幫助大家簡(jiǎn)化音頻工作流程。
一、音頻播放方式
首先,我們必須了解Cocos Creator中音頻播放的兩種方式,如下圖所示:

總結(jié)下就是,Cocos Creator提供兩種音頻播放方式,AudioEngine 與 AudioSource 都能播放音頻,它們的區(qū)別在于 AudioSource 是組件,可以添加到場(chǎng)景中,由編輯器設(shè)置。而 AudioEngine 是引擎提供的純 API,只能在腳本中進(jìn)行調(diào)用。
共同點(diǎn):本質(zhì)都是處理 AudioClip音頻資源,需要在Cocos Creator編輯器中掛載組件。
二、組件化工作流程
1.AudioSource組件使用步驟:
首先我們來(lái)回顧一下使用 AudioSource 的工作流程,隨后分析優(yōu)缺點(diǎn):
在【層級(jí)管理器】上創(chuàng)建一個(gè)空節(jié)點(diǎn),選中空節(jié)點(diǎn),在【屬性檢查器】最下方點(diǎn)擊【添加組件】 -> 其他組件 -> AudioSource 來(lái)添加 AudioSource 組件。
將【資源管理器】中所需的音頻資源拖拽到 AudioSource 組件的 Clip 中,如下所示:

通過(guò)腳本控制 AudioSource 組件:

選擇相對(duì)應(yīng)的節(jié)點(diǎn),添加腳本組件。然后將帶有 AudioSource 組件的節(jié)點(diǎn)拖拽到腳本組件中的 Audio Source 上,如下所示:

引用 audioSource 以控制音效。
2.AudioSource組件優(yōu)缺點(diǎn)
【1】?jī)?yōu)點(diǎn):提供面向設(shè)計(jì)和開(kāi)發(fā)的兩種工作流,是一種簡(jiǎn)單順暢的分工合作方式。記得嗎?Cocos Creator 是以內(nèi)容創(chuàng)作為核心的游戲開(kāi)發(fā)工具,在 Cocos2d-x 基礎(chǔ)上實(shí)現(xiàn)了徹底腳本化、組件化和數(shù)據(jù)驅(qū)動(dòng)等特點(diǎn)。
【2】缺點(diǎn):重復(fù)工作:每個(gè)音頻都需要重復(fù)上述多個(gè)操作步驟。維護(hù)困難:若音頻掛載在不同的節(jié)點(diǎn)中,不利于定位與維護(hù)。
【3】特點(diǎn):掛載在節(jié)點(diǎn)上的 AndioSource 可以跟隨節(jié)點(diǎn)的生命周期。優(yōu)點(diǎn):節(jié)點(diǎn)銷毀時(shí),掛載的 AndioSource 可以跟隨銷毀,無(wú)需額外調(diào)用方法。缺點(diǎn):節(jié)點(diǎn)頻繁創(chuàng)建與銷毀時(shí),AndioSource 也跟著頻繁加載銷毀。
三、工具化工作流程
清楚組件化工作流程的優(yōu)缺點(diǎn)后,我們嘗試工具化工作流程,工具代碼如下:
分為兩個(gè)階段:
*【1】預(yù)加載preloadAllAudio?:遍歷枚舉 AUDIO_ENUM,依次加載音頻資源 AudioClip,封裝為 AudioSource 后放入 _audios ,后者其實(shí)就是一個(gè)簡(jiǎn)單的空對(duì)象?!?】播放或停止 control:根據(jù)枚舉字符串,從_audios 中獲取 AudioSource,調(diào)用 play 或 stop 。
利用這個(gè)工具類,工作流程變?yōu)椋?/h1>
【1】預(yù)加載:在應(yīng)用初始化時(shí)調(diào)用 preloadAllAudio(只需要一次);
【2】將音頻放置到資源管理器對(duì)應(yīng)的目錄;
【3】在枚舉 AUDIO_ENUM 中添加音頻文件名,如下所示:
【4】引用工具類以控制音效缺點(diǎn):設(shè)計(jì)與開(kāi)發(fā)工作流未分離;優(yōu)點(diǎn):減少重復(fù)工作,增強(qiáng)可維護(hù)性。
四、權(quán)衡
馬克思主義告訴我們,凡事都有兩面性,其內(nèi)涵在軟件科學(xué)的解釋就是:沒(méi)有銀彈(No Silver Bullet)。對(duì)于組件化和工具化,哪種更理想,實(shí)際上并沒(méi)有一個(gè)定論。
對(duì)于高度內(nèi)容定制化的功能模塊,可以使用組件化工作流程,分離內(nèi)容定制工作。
對(duì)于需求相對(duì)固定的功能模塊,可以使用工具化工作流程,簡(jiǎn)化工作。