還有一件事要做,就是添加音樂。需要加載音樂文件,設置音量,然後開始播放。我們希望玩遊戲期間音樂一直在重複,所以會使用特殊值 -1,如下:
pygame.mixer.music.load("bg_music.mp3")pygame.mixer.music.set_volume(0.3)pygame.mixer.music.play(-1)
這個代碼可以放在主 while
循環前面的任意位置。它會開始播放音樂。現在只需要在最後讓音樂停下來,有一個很好的辦法來做到這一點。pygame.mixer.music
有一個 fadeout
方法,會讓音樂淡出(逐漸減弱直到消失),而不是戛然而止。只需要告訴它淡出需要多長時間,例如:
pygame.mixer.music.fadeout(2000)
這裡設置為 2000 毫秒,也就是 2 秒。這一行可以與 done = True
設置放在同一個位置。(這個設置在前在後都無關緊要。)
現在程序已經增加了音效和音樂。試試看聽起來怎麼樣!也許你想看看如何把所有這些內容整合在一起,下面給出這個程序的最後版本,也就是代碼清單 19-5。一定要確保 wackyball.bmp 和所有聲音文件與程序在同一個文件夾中。
代碼清單 19-5 有聲音和音樂的 PyPong
這個代碼太長了!(大約 100 行,還要加上一些空行。)這個程序完全可以寫得短一些,不過那樣一來,讀代碼和理解起來都會更困難。其實這幾章我們一直都在構建這個程序,每章補充一點內容,所以你並不需要一次鍵入所有這些代碼。
如果你是按順序讀這本書,現在應該已經瞭解程序的各個部分分別做什麼,也應該知道這些部分如何整合到一起。不過萬一你需要這個程序的完整代碼,也可以在 \examples 文件夾(如果已經安裝本書的安裝程序的話)和網站上找到這個程序的代碼清單。
在下一章,我們將建立一個不同類型的圖形程序:一個有按鈕、菜單的程序,也就是一個 GUI。
你學到了什麼
在這一章,你學到了以下內容。
如何向程序添加聲音。
如何播放聲音片段(通常是 .wav 文件)。
如何播放音樂文件(通常是 .mp3 文件)。
如何知道一個聲音已經播放完畢。
如何控制音效和音樂的音量。
如何讓音樂重複,使它反覆播放。
如何讓音樂淡出。
測試題
1. 可以用哪幾種類型的文件存儲聲音?
2. 哪個 Pygame 模塊用來播放音樂?
3. 如何設置一個 Pygame 聲音對象的音量?
4. 如何設置背景音樂的音量?
5. 如何讓音樂淡出?
動手試一試
試著向第 1 章中的猜數遊戲添加聲音。儘管這個遊戲是文本模式的,但與這一章中的例子一樣,仍然需要增加一個 Pygame 窗口。\examples\sounds 文件夾(和網站上)有一些聲音可供你使用:
Ahoy.wav
TooLow.wav
TooHigh.wav
WhatsYerGuess.wav
AvastGotIt.wav
NoMore.wav
或者,你也可以錄製自己的聲音,這可能很有意思。可以使用一個錄音工具,比如 Windows 中的 Sound Recorder,或者可以從 audacity.sourceforge.net/ 下載一個免費程序 Audacity(很多操作系統上都提供了這個工具)。