pygame-KidsCanCode系列jumpy-part14-背景音乐及音效
没有音乐和音效的游戏是没有灵魂的,这回讲解如何处理背景音乐及跳跃音效。加载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-背景音乐及音效相关推荐
- Unity - AudioManager 给背景音乐、音效添加统一的音量管理
今天给自己测试项目添加音效(音效找了好N,免费的甚少,基本收费,对于我们开发测试项目实属不便,找了几个免费的将就着用). 音量控制类型 游戏里的设置都会有: 整体音量 背景音乐音量 游戏音效音量 的三 ...
- Cocos2d-JS 中游戏背景音乐与音效
游戏中音频的处理也是非常重要的,它分为背景音乐播放与音效播放. 背景音乐是长时间循环播放的,它会长时间占用较大的内存,背景音乐不能多个同时播放. 而音效是短的声音,它占用内存较小,音效能多个同时播放. ...
- android开发之背景音乐与音效
文章转载于https://www.cnblogs.com/hesi/p/5750862.html 仅供博主笔记学习用 android开发之背景音乐与音效 一:添加背景音乐(MediaPlayer) M ...
- 游戏背景音乐与音效存在于游戏中有什么特殊的意义?
游戏被称为第九种艺术,他说一个独立的.完整的世界.在游戏的世界里我们沉醉其中,无法自拔.在游戏的世界里,必不可缺的就是游戏背景音乐和音效了,那么游戏中的音乐和音效到底有什么特殊的意义呢?下面奇亿音乐小 ...
- 给java swing程序添加背景音乐或音效
"在平时做小程序中我们可能会想在程序中加上一些背景音乐和音效,以下是我使用的方法(非本人原创)." 源码如下: package Wuzi;import javax.sound.sa ...
- pygame 笔记-8 背景音乐子弹音效
游戏哪能没有音效?这节我们研究下如何加背景音乐,其实也很简单: # 加载背景音乐 pygame.mixer.music.load(music_base_path + "music.mp3&q ...
- 【cocos2d-x入门实战】微信飞机大战之十四:背景音乐和音效
原创作品,转载请标明:http://blog.csdn.net/jackystudio/article/details/12117827 整个游戏完成了,可以痛快的在电脑上打飞机了!可是感觉少了点什么 ...
- Unity 声音管理器,播放背景音乐和音效
using UnityEngine;public class AudioManager : MonoBehaviour {private static AudioManager _instance;p ...
- 我儿子自己敲出来的代码:用pygame组件播放植物大战僵尸背景音乐
最然我们是抄来的,一点点的学习吧 import time import pygame file=r'C:\Users\Administrator\Desktop\play\back.wav' pyga ...
最新文章
- ATS 6.2.1打release版本rpm包时插件中出现undefined symbol的问题追踪
- Map Join介绍及案例
- 如何在Java中生成特定范围内的随机整数?
- php phppowerpoint 生成表格_php之EXCEL导出代码生成器的实现思路
- dbms_java_java实现DBMS
- LeetCode——分治
- 英语分词组_考生必看!成人高考英语大牛教你如何轻松考高分
- 挂起某线程命令 Linux,linux 线程挂起恢复的简单示例
- SQLServer Profiler 跟踪器
- [swift]-类的构造函数
- js 原型链的介绍
- 连麦互动技术及其连麦调研
- python如何开发一个程序思路_用python编写一个合格的ftp程序,思路是怎样的?
- Hilbert变换简要剖析
- 笔记本按开机键没反应怎么办
- 智能家居时代,怎样选择一把你心底里切实需要的智能门锁?
- office邮箱不能预览附件问题
- VMware虚拟机实现局域网互通
- 如何成为IC验证工程师?
- 关于conda无法创建新环境的解决方法(路径或channel)
热门文章
- python3*1**3 表达式输出结果为_3*1**3 表达式输出结果为________
- 如何与陌生人交谈的技巧
- 华为早几年的服务器型号,云服务器一般用几年
- 使用h5的方式来实现钟表
- Google Adsense 网友领款过程
- element表格固定表头
- 为什么很多人会觉得FPGA难学?
- Thinkphp实现超级漂亮实用的淘宝客平台源码
- 5G产业——新智能时代革命
- 读取远程服务器上文件内容,读取远程服务器上的文件