使用 XNA/Sound 建立簡單的 3D 遊戲
在 XNA 中使用音效可能有點繁瑣,因為需要使用一個外部應用程式 XACT 工具(可在 XNA 開始選單資料夾的工具資料夾中找到)將聲音檔案處理成“提示”檔案,才能在專案中使用。可以直接在程式碼中播放“.Wav”檔案,但您將無法調整聲音的屬性,正如您將在下面看到的那樣。開啟 XACT v3,您應該會看到以下螢幕。

在本專案中,我們將使用兩個音效,一個每次碰撞到魚時播放的開放許可聲音效果檔案,以及從 Newgrounds 音訊門戶 獲取的迴圈音樂檔案,這是一個針對獨立遊戲的良好資源(在 Xbox Arcade 上可用的遊戲“Castle Crashers”的所有音樂都來自此網站),可以免費使用。這兩個音效都可以在主頁面上的完整示例中找到。請注意,聲音必須先轉換為“.Wav”檔案才能使用,為此,我使用了音訊轉換實用程式 dBpoweramp。
我們將載入的每個聲音都將儲存在一個“波形庫”中,該庫包含程式在執行時流式傳輸的原始音訊資料。然後,關於如何播放這些檔案的說明將儲存在一個“聲音庫”中,該庫包含“聲音”,其中包含要播放的每個聲音的屬性,以及“提示”,將在程式中引用。
建立一個新專案(在我的例子中稱為“FishSounds”),右鍵單擊螢幕左側的“波形庫”標籤,然後選擇“新建波形庫”。右鍵單擊新建的波形庫,然後選擇“插入波形檔案”,並開啟兩個波形檔案。
接下來,右鍵單擊您的聲音庫,並建立一個新的聲音庫。右鍵單擊新庫並建立兩個新的“聲音”,一個名為“Effect”,另一個名為“Music”。將“波形庫”中的條目拖放到相應的“聲音庫”中。如果您選擇一個新的“聲音庫”,您將在左側看到一組選項。我們這裡唯一需要關注的是頂部的“迴圈”/“無限”複選框,但您可以隨意調整其他任何選項。單擊您的“Music”聲音,然後單擊下面的複選框。

以與聲音相同的方式建立兩個新的提示,並與之前一樣將它們重新命名為“Effect”和“Music”,並將相應的“Sound”拖放到它們中。
現在儲存您的專案,然後返回您的遊戲專案。右鍵單擊您的“Content”資料夾,並新增新建立的“FishSounds.xap”專案檔案。
建立以下 3 個新的類變數;
AudioEngine audioEngine;
WaveBank waveBank;
SoundBank soundBank;
以及以下行到您的“LoadContent()”方法中。
audioEngine = new AudioEngine("Content\\FishSounds.xgs");//The new audio project
waveBank = new WaveBank(audioEngine, "Content\\Wave Bank.xwb");//The name of the Wave bank
soundBank = new SoundBank(audioEngine, "Content\\Sound Bank.xsb");//The name of the Sound bank
如果您在此時編譯程式碼,並且出現有關找不到聲音效果的錯誤訊息,請更改 XACT 中“.Wav”檔案的路徑。
現在,為了播放背景音樂,請將以下行插入到您上面的初始化程式碼之後。
soundBank.PlayCue("Music");
並將您的碰撞檢測程式碼更改為以下內容。
if (CheckCollision(FishMen.Translation, OtherFishes[i].Translation)
&&
OtherFishes[i].clip == OtherFishes[i].skinningData.AnimationClips["Frown"])
{
OtherFishes[i].PlayAnimation("Smile");
soundBank.PlayCue("Effect");
}
現在執行您的程式碼,您應該擁有一個功能完備的音效系統。