少儿编程之使用PyGame编写游戏(10):太空大撞击 加入音效

声音的力量

良好的音频(声音和音乐)是为游戏加料(Juice)的最有效方式。 加料(Juice)是一个非正式的游戏设计词,表示使游戏变得有趣和引人入胜的事物。 有时也称为“游戏感觉”。

与图形一样,为游戏找到合适的声音也是具有挑战性的事。 OpenGameArt 是查找音频资源的好地方,在该站点中搜索声音是一种有趣的体验,但我们将寻求另一种创建游戏音效的方法。

制作自定义声音

我们将使用一个非常棒的工具 Bfxr 来生成我们的 太空大撞击 游戏所需的声音。 Bfxr 看起来像这样:

不要被所有这些滑块和音频术语吓倒。 左侧的按钮将随机生成该类型的声音。 尝试单击“Shoot”按钮几次。 生成的声音将保存在按钮下方的列表中。

对于 太空大撞击 游戏,我们需要一个“射击”声音和一个“爆炸”声音。 当你找到你想要的声音时,点击“Export Wav”按钮(不是“Save to Disk”按钮)。

接下来,我们将创建一个“snd”文件夹(就像我们为图像所做的那样)并将 WAV 文件放在那里。 以下是我选择的声音:(音频文件请查看文末源代码链接处,直接在游戏运行页面查看)

  • expl3.wav
  • expl6.wav
  • pew.wav

请注意,有两个爆炸声。 这样,我们可以在它们之间随机选择,并在我们的Mob爆炸中有一点变化。
最后但并非最不重要的一点是,我们需要一些背景音乐。 随意浏览 OpenGameArt,或者你可以使用这个:
Frozen Jam by tgfcoder
请注意,在上面的页面上,艺术家已指定“署名说明”。 这些是艺术家选择将音乐许可给您的要求。 简而言之,这意味着我们必须给艺术家以赞誉(credit)。 我们将在程序顶部复制并粘贴该语句。

为游戏添加声音

我们已准备好将声音添加到游戏中。 首先,我们需要指定我们的声音文件夹在哪里:

  1. # Frozen Jam by tgfcoder <https://twitter.com/tgfcoder> licensed under CC-BY-3
  2. # Art from Kenney.nl
  3. import pygame
  4. import random
  5. from os import path
  6. img_dir = path.join(path.dirname(__file__), 'img')
  7. snd_dir = path.join(path.dirname(__file__), 'snd')

接下来,我们需要加载声音文件。 我们将在加载图形的同一位置执行此操作。 让我们先做射击声音:

  1. # Load all game sounds
  2. shoot_sound = pygame.mixer.Sound(path.join(snd_dir, 'pew.wav'))

现在我们已加载声音并将其分配给变量 shoot_sound,以便我们可以引用它。 我们希望在玩家射击时播放声音,所以让我们将其添加到 shoot() 方法中:

  1. def shoot(self):
  2. bullet = Bullet(self.rect.centerx, self.rect.top)
  3. all_sprites.add(bullet)
  4. bullets.add(bullet)
  5. shoot_sound.play()

这就是和射击相关的音效设置,现在,射击的时候,感受好多了!
接下来,让我们添加爆炸声。 我们将加载它们并将它们放在一个列表中:

  1. # Load all game sounds
  2. shoot_sound = pygame.mixer.Sound(path.join(snd_dir, 'pew.wav'))
  3. expl_sounds = []
  4. for snd in ['expl3.wav', 'expl6.wav']:
  5. expl_sounds.append(pygame.mixer.Sound(path.join(snd_dir, snd)))

我们将在摧毁Mob时随机选择其中一个音效来播放:

  1. # check to see if a bullet hit a mob
  2. hits = pygame.sprite.groupcollide(mobs, bullets, True, True)
  3. for hit in hits:
  4. score += 50 - hit.radius
  5. random.choice(expl_sounds).play()
  6. m = Mob()
  7. all_sprites.add(m)
  8. mobs.add(m)

背景音乐

最后要做的是添加一些背景音乐,这会给游戏带来很多个性和情感。 音乐与声音的工作方式略有不同,因为您希望它在后台不断播放。
首先,加载音乐:

  1. expl_sounds = []
  2. for snd in ['expl3.wav', 'expl6.wav']:
  3. expl_sounds.append(pygame.mixer.Sound(path.join(snd_dir, snd)))
  4. pygame.mixer.music.load(path.join(snd_dir, 'tgfcoder-FrozenJam-SeamlessLoop.ogg'))
  5. pygame.mixer.music.set_volume(0.4)

这个音乐文件音量比较大,我们不希望它压倒其他声音,因此我们还将音量设置为最大值的 40%。
要播放音乐,您只需在代码中选择歌曲应该从哪里开始,在我们的例子中就是在游戏循环开始之前:

  1. score = 0
  2. pygame.mixer.music.play(loops=-1)
  3. # Game loop
  4. running = True

loops 参数是您指定歌曲重复次数的方式。 通过将循环设置为-1,我们可以无限重复。
试试看 —— 现在游戏的时候感觉不是好多了? 我们没有改变任何游戏玩法,但音乐和音效让体验更加丰富。 尝试不同的声音,看看它如何影响游戏感觉。

在下一课中,我们将为玩家添加生命值,这样玩家就不会那么容易“死去”。
完整的代码请访问:
Pygame教程:太空大撞击 添加音效 配套代码

题图来自:UnSplash

微信扫一扫,分享此文章

少儿编程教学平台

联系我们

微信

aguibo002

邮箱

haoxuehaojiao在163.com

Loading
我们已经收到您的信息,将尽快联系您!