
昨天晚上吃饭的时候,Tyree一边扒饭一边跟我说:“为什么平时玩的的游戏,开枪有声音,爆炸也有声音,还有背景音乐?我那个飞船打陨石的游戏,子弹打出去静静的,击中陨石也啥都没有,玩着不是很爽。”
我说:“那是因为你没加音效啊。pygame 里有个 `pygame.mixer` 模块,专门管声音的。你可以找自己喜欢音效文件,放进去,声音就有啦。”
他迫不急待的放下筷子:“那我要加!子弹发射时‘咻’一声,击中陨石时‘砰’一声,再来点刺激的背景音乐,就像真的在太空打仗一样。”
接下来今天课程呢,我们就来给游戏加上声音。你将会学到怎么加载音效和背景音乐、怎么播放和停止、以及怎么控制音量。这些完成后,你的游戏就会从“默片”升级成“有声大片”。
01. 准备工作:找音效文件
首先你需要两个短音效和一个背景音乐文件(建议用`.wav` 或 `.ogg` 格式,`.mp3` 在某些系统上可能有问题)。
可以自己录制或从网上找免费资源。给文件起好名字,也可以按自己的喜好起,英文字母就行:
`shoot.wav`:子弹发射声
`explode.wav`:击中陨石的爆炸声
`background.ogg`:背景音乐
把这三个文件和你编写Python 脚本(代码)放在同一个文件夹里。
02. 初始化混音器
在使用`pygame.mixer` 之前,需要先初始化。Python里的`pygame.init()` 已经包含了混音器的初始化,
但如果你只想单独初始化混音器,也可以写 `pygame.mixer.init()`。这里我们保持原来的`pygame.init()` 就行。
然后加载音效和背景音乐:
shoot_sound =
pygame.mixer.Sound("shoot.wav")
explode_sound =
pygame.mixer.Sound("explode.wav")
pygame.mixer.music.load("background.ogg")
`pygame.mixer.Sound` 用于加载短音效(可以同时播放多个)。
`pygame.mixer.music.load` 用于加载背景音乐(同一时间只能播放一首)。
03. 播放音效和音乐
在发射子弹的代码那里(就是游戏按空格时),加上播放射击音效,代码如下:
if event.key == pygame.K_SPACE:
shoot_sound.play()
# 发射子弹的代码...
在子弹击中陨石的碰撞检测中,加上播放爆炸音效:
if bullet.colliderect(meteor):
explode_sound.play()
# 移除子弹和陨石、加分...
背景音乐要循环播放,可以在游戏开始后启动:
pygame.mixer.music.play(-1) # -1 表示无限循环
04. 控制音量
声音太大,会影响游戏的心情,所以要控制音量大小,控制声音就要用到
sound.set_volume()了。
每个Sound 对象都有 `set_volume` 方法,参数范围 0.0 到 1.0(静音到最大)。背景音乐可以用
`pygame.mixer.music.set_volume`。
shoot_sound.set_volume(0.5) # 50%音量
explode_sound.set_volume(0.8)
pygame.mixer.music.set_volume(0.3)
代码可以放在音效加载之后。
05. 整合到游戏中
下面来在第33课完整代码的基础上,加入音效和背景音乐的修改(仅展示关键改动,完整代码在文末,评论区也有)。
06. 完整代码(已集成音效)
我们一起来看下完代码,代码虽然很长,但不用怕,其实要修改的也不多,多数都是上一课的代码!
下面是完整代码,运行后操作键盘就可以有声音啦!





运行后,再打游戏的时候,击打陨石就会有声响咯!

07. 今天学到了什么
`pygame.mixer.Sound`:加载短音效,可以多个同时播放。
`pygame.mixer.music`:加载背景音乐,同一时间只能放一首。
`play()`:播放音效或音乐,背景音乐用`play(-1)` 循环。
`set_volume()`:控制音量,Sound 和 music 各自独立。
音效文件格式:推荐`.wav` 或 `.ogg`,`.mp3` 支持不完善。
Tyree给自己的游戏加上了“咻咻咻”的射击声和“砰砰砰”的爆炸声,还放了一首太空主题的背景音乐。他一边玩一边说:“这才叫游戏嘛!”
好了,今天课程就到这!
下一节课会学到:增加分数显示和生命值优化——制作计分板。我们会把分数和生命做得更漂亮,还会增加游戏结束后的“重新开始”功能。
————热门推荐————
少儿自学编程第33课:Python让飞船发射子弹,打中陨石就加分,游戏从此有了“打击感”
自学编程第8课:turtle画对称图形(彩色螺旋、彩色对称花、等边三角形、五角星)
自学编程第7课:turtle画图入门(画一个正方形,五角形,螺旋形,三角形)
自学编程第2课:用input让电脑问你名字(做一个打招呼程序)
自学编程第一步:安装Python和Thonny(零基础图文教程)
(本系列教程每天更新,欢迎关注收藏)