项目详细介绍
在这个系列中,将制作一个雷霆战机游戏。
声音的力量
对于游戏,需要一个“射击”声音和一个“爆炸”声音。创建一个“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
,把它无限重复。
在下一课中,将为玩家添加一些盾牌,这样就不会那么容易死亡。