还有一件事要做,就是添加音乐。需要加载音乐文件,设置音量,然后开始播放。我们希望玩游戏期间音乐一直在重复,所以会使用特殊值 -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(很多操作系统上都提供了这个工具)。