还有一件事要做,就是添加音乐。需要加载音乐文件,设置音量,然后开始播放。我们希望玩游戏期间音乐一直在重复,所以会使用特殊值 -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 文件)。
如何知道一个声音已经播放完毕。
如何控制音效和音乐的音量。
如何让音乐重复,使它反复播放。
如何让音乐淡出。
测试题
可以用哪几种类型的文件存储声音?
哪个 Pygame 模块用来播放音乐?
如何设置一个 Pygame 声音对象的音量?
如何设置背景音乐的音量?
如何让音乐淡出?
动手试一试
试着向第 1 章中的猜数游戏添加声音。尽管这个游戏是文本模式的,但与这一章中的例子一样,仍然需要增加一个 Pygame 窗口。/examples/sounds 文件夹(和网站上)有一些声音可供你使用:
Ahoy.wav
TooLow.wav
TooHigh.wav
WhatsYerGuess.wav
AvastGotIt.wav
NoMore.wav
或者,你也可以录制自己的声音,这可能很有意思。可以使用一个录音工具,比如 Windows 中的 Sound Recorder,或者可以从 http://audacity.sourceforge.net/ 下载一个免费程序 Audacity(很多操作系统上都提供了这个工具)。