没有音乐和音效的游戏是没有灵魂的,这回讲解如何处理背景音乐及跳跃音效。加载music及sound的方法,之前已经写过,见:pygame 笔记-8 背景音乐&子弹音效 。

先介绍一个很棒的生成各种音效的网站:https://www.bfxr.net/,该网站提供了一个音效生成器,界面如下:

利用该工具,可以生成各种跳跃、爆炸之类的音效wav文件。

然后就是背景音乐了,pygame支持wav, mp3, ogg等这种格式,但是考虑到背景音乐通常比较大,不建议用wav做背景音乐,最好是mp3或ogg格式,mp3格式有专利,而且pygame对mp3的兼容性不太好,最佳推荐是ogg格式。

提供2个在线转换成ogg格式的网址:

https://cloudconvert.com/wav-to-ogg

https://cloudconvert.com/mp3-to-ogg

另外,再送一波福利,可以在opengameart.org上找到很多游戏的常用背景音乐:

https://opengameart.org/art-search-advanced?keys=&field_art_type_tid%5B%5D=12&sort_by=count&sort_order=DESC

有了这些素材后,就该写代码了:

将准备好的声音素材,放到指定的目录,参考上图。

然后在main.py的load_data中,加载跳跃的音效:

 1     def load_data(self):
 2         file_path = path.join(self.dir, HIGH_SCORE_FILE)
 3         if path.exists(file_path):
 4             with open(file_path, "r") as f:
 5                 try:
 6                     self.high_score = int(f.read())
 7                 except:
 8                     self.high_score = 0
 9         self.spritesheet = Spritesheet(path.join(self.dir, SPRITE_SHEET_PNG_FILE),
10                                        path.join(self.dir, SPRITE_SHEET_XML_FILE))
11
12         # 设置声音目录
13         # 声音素材,可通过https://www.bfxr.net/获取
14         self.snd_dir = path.join(self.dir, "../snd")
15         self.jump_sound = pg.mixer.Sound(path.join(self.snd_dir, "Jump.wav"))

View Code

然后在new函数中,加载背景音乐

1     def new(self):
2         self.score = 0
3         ...
4         # 加载背景音乐
5         pg.mixer.music.load(path.join(self.snd_dir, "bgm.mp3"))
6         self.run()

View Code

run函数中,循环播放背景音乐:

 1     def run(self):
 2         # 循环播放背景音乐
 3         pg.mixer.music.play(-1)
 4         self.playing = True
 5         while self.playing:
 6             self.clock.tick(FPS)
 7             self.events()
 8             self.update()
 9             self.draw()
10         # game over时背景音乐淡出
11         pg.mixer.music.fadeout(500)

View Code

注:这里用了一个小技巧,GameOver的时候,如果硬生生把背景音乐关掉,有点突兀,用fadeout淡出方法,会友好一些。

如果start界面和game over界面,如果希望放另一种背景音乐,也依葫芦画瓢:

1     def show_start_screen(self):
2         # 启动界面播放背景音乐
3         pg.mixer.music.load(path.join(self.snd_dir, "start_and_go.ogg"))
4         pg.mixer.music.play(-1)
5         self.screen.fill(BG_COLOR)
6         ...
7         self.wait_for_key()
8         # 有按键开始时,淡出背景音
9         pg.mixer.music.fadeout(500)

View Code

 1     def show_go_screen(self):
 2         # 启动界面播放背景音乐
 3         pg.mixer.music.load(path.join(self.snd_dir, "start_and_go.ogg"))
 4         pg.mixer.music.play(-1)
 5         self.screen.fill(BG_COLOR)
 6         ...
 7         pg.display.update()
 8         self.wait_for_key()
 9         # 有按键开始时,淡出背景音
10         pg.mixer.music.fadeout(500)

View Code

目前为止,跳跃的音效还没使用到,可以要Player类的jump函数中,播放该音效:

1     def jump(self):
2         hits = pg.sprite.spritecollide(self, self.game.platforms, False)
3         if hits and not self.jumping:
4             # 播放声音
5             self.game.jump_sound.play()
6            ...

View Code

博客无法直接上传视频文件,最终带声音效果的视频如下:

链接: https://pan.baidu.com/s/1DTalKLFfYBOLw3MQpLIsig 提取码: wnhs

源码:https://github.com/yjmyzz/kids-can-code/tree/master/part_14

转载于:https://www.cnblogs.com/yjmyzz/p/pygame-kidscancode-part14-sound-and-music.html

pygame-KidsCanCode系列jumpy-part14-背景音乐及音效相关推荐

  1. Unity - AudioManager 给背景音乐、音效添加统一的音量管理

    今天给自己测试项目添加音效(音效找了好N,免费的甚少,基本收费,对于我们开发测试项目实属不便,找了几个免费的将就着用). 音量控制类型 游戏里的设置都会有: 整体音量 背景音乐音量 游戏音效音量 的三 ...

  2. Cocos2d-JS 中游戏背景音乐与音效

    游戏中音频的处理也是非常重要的,它分为背景音乐播放与音效播放. 背景音乐是长时间循环播放的,它会长时间占用较大的内存,背景音乐不能多个同时播放. 而音效是短的声音,它占用内存较小,音效能多个同时播放. ...

  3. android开发之背景音乐与音效

    文章转载于https://www.cnblogs.com/hesi/p/5750862.html 仅供博主笔记学习用 android开发之背景音乐与音效 一:添加背景音乐(MediaPlayer) M ...

  4. 游戏背景音乐与音效存在于游戏中有什么特殊的意义?

    游戏被称为第九种艺术,他说一个独立的.完整的世界.在游戏的世界里我们沉醉其中,无法自拔.在游戏的世界里,必不可缺的就是游戏背景音乐和音效了,那么游戏中的音乐和音效到底有什么特殊的意义呢?下面奇亿音乐小 ...

  5. 给java swing程序添加背景音乐或音效

    "在平时做小程序中我们可能会想在程序中加上一些背景音乐和音效,以下是我使用的方法(非本人原创)." 源码如下: package Wuzi;import javax.sound.sa ...

  6. pygame 笔记-8 背景音乐子弹音效

    游戏哪能没有音效?这节我们研究下如何加背景音乐,其实也很简单: # 加载背景音乐 pygame.mixer.music.load(music_base_path + "music.mp3&q ...

  7. 【cocos2d-x入门实战】微信飞机大战之十四:背景音乐和音效

    原创作品,转载请标明:http://blog.csdn.net/jackystudio/article/details/12117827 整个游戏完成了,可以痛快的在电脑上打飞机了!可是感觉少了点什么 ...

  8. Unity 声音管理器,播放背景音乐和音效

    using UnityEngine;public class AudioManager : MonoBehaviour {private static AudioManager _instance;p ...

  9. 我儿子自己敲出来的代码:用pygame组件播放植物大战僵尸背景音乐

    最然我们是抄来的,一点点的学习吧 import time import pygame file=r'C:\Users\Administrator\Desktop\play\back.wav' pyga ...

最新文章

  1. ATS 6.2.1打release版本rpm包时插件中出现undefined symbol的问题追踪
  2. Map Join介绍及案例
  3. 如何在Java中生成特定范围内的随机整数?
  4. php phppowerpoint 生成表格_php之EXCEL导出代码生成器的实现思路
  5. dbms_java_java实现DBMS
  6. LeetCode——分治
  7. 英语分词组_考生必看!成人高考英语大牛教你如何轻松考高分
  8. 挂起某线程命令 Linux,linux 线程挂起恢复的简单示例
  9. SQLServer Profiler 跟踪器
  10. [swift]-类的构造函数
  11. js 原型链的介绍
  12. 连麦互动技术及其连麦调研
  13. python如何开发一个程序思路_用python编写一个合格的ftp程序,思路是怎样的?
  14. Hilbert变换简要剖析
  15. 笔记本按开机键没反应怎么办
  16. 智能家居时代,怎样选择一把你心底里切实需要的智能门锁?
  17. office邮箱不能预览附件问题
  18. VMware虚拟机实现局域网互通
  19. 如何成为IC验证工程师?
  20. 关于conda无法创建新环境的解决方法(路径或channel)

热门文章

  1. python3*1**3 表达式输出结果为_3*1**3 表达式输出结果为________
  2. 如何与陌生人交谈的技巧
  3. 华为早几年的服务器型号,云服务器一般用几年
  4. 使用h5的方式来实现钟表
  5. Google Adsense 网友领款过程
  6. element表格固定表头
  7. 为什么很多人会觉得FPGA难学?
  8. Thinkphp实现超级漂亮实用的淘宝客平台源码
  9. 5G产业——新智能时代革命
  10. 读取远程服务器上文件内容,读取远程服务器上的文件