项目详细介绍
在这个系列中,将制作一个雷霆战机游戏。
声音的力量
对于游戏,需要一个“射击”声音和一个“爆炸”声音。创建一个“snd”文件夹(就像为图像所做的那样)并将WAV文件放在那里。
请注意,有两种爆炸声。这样,可以在它们之间随机选择,让流星爆炸中有一点变化。
最后,需要一些背景音乐。
为游戏添加声音
将声音添加到游戏中。需要指定声音文件夹的位置:
# Frozen Jam by tgfcoder <https://twitter.com/tgfcoder> licensed under CC-BY-3
# Art from Kenney.nl
import pygame
import random
from os import path
img_dir = path.join(path.dirname(__file__), 'image')
snd_dir = path.join(path.dirname(__file__), 'snd')
接下来,需要加载声音文件。
# Load all game sounds
shoot_sound = pygame.mixer.Sound(path.join(snd_dir, 'pew.wav'))
将声音加载并分配给变量shoot_sound
,希望每当玩家发射子弹时都会播放声音,所以将其添加到shoot()
方法中:
def shoot(self):
bullet = Bullet(self.rect.centerx, self.rect.top)
all_sprites.add(bullet)
bullets.add(bullet)
shoot_sound.play()
接下来,添加爆炸声。将加载它们并将它们放在一个列表中:
# Load all game sounds
shoot_sound = pygame.mixer.Sound(path.join(snd_dir, 'pew.wav'))
expl_sounds = []
for snd in ['expl3.wav', 'expl6.wav']:
expl_sounds.append(pygame.mixer.Sound(path.join(snd_dir, snd)))
为了让爆炸发挥作用,每当摧毁流星时,都会随机选择其中一个播放:
# check to see if a bullet hit a mob
hits = pygame.sprite.groupcollide(mobs, bullets, True, True)
for hit in hits:
score += 50 - hit.radius
random.choice(expl_sounds).play()
m = Mob()
all_sprites.add(m)
mobs.add(m)
音乐
最后要做的是添加一些背景音乐,这将为游戏带来很多个性和情感。
首先,加载音乐:
expl_sounds = []
for snd in ['expl3.wav', 'expl6.wav']:
expl_sounds.append(pygame.mixer.Sound(path.join(snd_dir, snd)))
pygame.mixer.music.load(path.join(snd_dir, 'tgfcoder-FrozenJam-SeamlessLoop.ogg'))
pygame.mixer.music.set_volume(0.4)
这个音乐文件恰好相当响亮,不希望它压倒其他声音,所以也将音量设置为最大音量的40%。
要播放音乐,您只需选择歌曲应该在代码中的哪个位置开始播放,在情况下就是在游戏循环开始之前:
score = 0
pygame.mixer.music.play(loops=-1)
# Game loop
running = True
该loops
参数是指定你想要的歌曲重复播放的次数。通过设置loops
到-1
,把它无限重复。
在下一课中,将为玩家添加一些盾牌,这样就不会那么容易死亡。