没有音乐和音效的游戏是没有灵魂的,这回讲解如何处理背景音乐及跳跃音效。加载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中,加载跳跃的音效:

     def load_data(self):
file_path = path.join(self.dir, HIGH_SCORE_FILE)
if path.exists(file_path):
with open(file_path, "r") as f:
try:
self.high_score = int(f.read())
except:
self.high_score = 0
self.spritesheet = Spritesheet(path.join(self.dir, SPRITE_SHEET_PNG_FILE),
path.join(self.dir, SPRITE_SHEET_XML_FILE)) # 设置声音目录
# 声音素材,可通过https://www.bfxr.net/获取
self.snd_dir = path.join(self.dir, "../snd")
self.jump_sound = pg.mixer.Sound(path.join(self.snd_dir, "Jump.wav"))

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

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

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

     def run(self):
# 循环播放背景音乐
pg.mixer.music.play(-1)
self.playing = True
while self.playing:
self.clock.tick(FPS)
self.events()
self.update()
self.draw()
# game over时背景音乐淡出
pg.mixer.music.fadeout(500)

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

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

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

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

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

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

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

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

pygame-KidsCanCode系列jumpy-part14-背景音乐及音效的更多相关文章

  1. Cocos2d-x实例:设置背景音乐与音效- AppDelegate实现

    为了进一步了解背景音乐和音效播放的,我们通过一个实例给大家介绍一下.如下图所示有两个场景:HelloWorld和Setting.在HelloWorld场景点击“游戏设置”菜单可以切换到Setting场 ...

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

    android开发之背景音乐与音效 一:添加背景音乐(MediaPlayer) MediaPlayer class can be used to control playback of audio/v ...

  3. Cocos2d-x使用UserDefault数据持久化实例:保存背景音乐和音效设置

    UserDefault可以实现数据的存储,但是它的使用不能泛滥,具体讲一般情况下不会使用它保存大量的数据,它没有SQL语句那样的灵活.UserDefault除了保存游戏设置外,还有可以长期保持游戏精灵 ...

  4. Swift - 给游戏添加背景音乐和音效(SpriteKit游戏开发)

    游戏少不了背景音乐和音效.下面我们通过创建一个管理音效的类,来实现背景音乐的播放,同时点击屏幕可以播放相应的音效. 声音管理类 SoundManager.swift 1 2 3 4 5 6 7 8 9 ...

  5. 关于Cocos2d-x中背景音乐和音效的添加

    1.首先引入头文件和命名空间 #include "SimpleAudioEngine.h" using namespace CocosDenshion; 2.在GameScene. ...

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

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

  7. Pygame播放背景音乐与音效

    1.播放背景音乐 pygame.mixer.music.load() 加载MP3格式 加入pygame.mixer.init()即可 第十一行第一个参数:播放次数(n>0),n=0时播放1次,- ...

  8. Cocos2d-x实例:设置背景音乐与音效-设置场景实现

    设置场景(Setting),Setting.h文件代码如下: #ifndef __Setting_SCENE_H__ #define __Setting_SCENE_H__ #include &quo ...

  9. Cocos2d-x实例:设置背景音乐与音效-HelloWorld场景实现

    HelloWorld场景就是游戏中的主菜单场景.HelloWorld.h文件代码如下: #define __HELLOWORLD_SCENE_H__ #include "cocos2d.h& ...

随机推荐

  1. libsecp256k1 与 openssl ecdsa

    1. 历史 区块链节点在接收到的用户发送的交易时,首先会验证交易所涉及utxo的可用性.方法是验证用户签名的合法性,涉及的签名算法就是secp256k1,一种椭圆曲线加密算法. 长期以来,实现了该算法 ...

  2. 未在本地计算机上注册“OraOLEDB.Oracle.1”提供程序。

     问题描述:运行访问oracle数据库的.net程序时,弹出错误"未在本地计算机上注册“OraOLEDB.Oracle.1”提供程序". 系统环境:windows server 2 ...

  3. js中时间大小的比较

    今天在前台做到一个需要比较两个日期大小的地方,乍一看,发现一个比较奇怪地地方: var t1 = new Date(2018,1,1), t2 = new Date(2018,1,1); consol ...

  4. jQuery懒加载插件 – jquery.lazyload.js简单调用

    Lazy Load 是一个用 JavaScript 编写的 jQuery 插件. 它可以延迟加载长页面中的图片. 在浏览器可视区域外的图片不会被载入, 直到用户将页面滚动到它们所在的位置. 这与图片预 ...

  5. python --判断列表重复

    一.判断单个列表中的元素是否存在重复 使用set方法去重后,和原list进行对比,如果相等,那么说明原列表无重复,如果存在重复,说明列表存在重复 def is_repect_all(L): repea ...

  6. BZOJ4409 [Usaco2016 Feb]Circular barn 动态规划 斜率优化

    原文链接http://www.cnblogs.com/zhouzhendong/p/8724739.html 题目传送门 - BZOJ4409 题意 有一个N个点的环,相邻两个点距离是1.点顺时针标号 ...

  7. Java大数相乘-hdu1063

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1063 题目描述: 代码实现: import java.util.Scanner; import jav ...

  8. UVA136 Ugly Numbers【set】【优先队列】

    丑数 丑数是指不能被2,3,5以外的其他素数整除的数.把丑数从小到大排列起来,结果如下: 1,2,3,4,5,6,8,9,10,12,15,… 求第1500个丑数. 提示:从小到大生成各个丑数.最小的 ...

  9. uni-app — 一套前端开发跨平台应用的终极解决方案

    uni-app 是一个使用 Vue.js 开发跨平台应用的前端框架,开发者编写一套代码,可编译到iOS.Android.H5.小程序等多个平台. 今天有空就来介绍一下uni-app这个能够跨平台开发, ...

  10. Java反射之基础概念

    0.实例准备 package com.blueStarWei.invoke; public class Student { private String name; public Student() ...