前言

这次的魔爪放在音乐部分,主要使用的是pygame.mixer以及其中的music。
我在背景音乐上添加了内容,并在发射子弹和子弹碰到外星人的时候播放音乐(噪音)。

话不多说,我们就开始看吧。

准备素材

首先贴一个B站dl的百度网盘:链接,有一说一这容量还是很震撼的。
这里就不推荐网站了,找了几个下载的时候都比较烦人,如果有好的可以在下面评论区推荐一下。
另外我查了一下,貌似背景音乐需要使用ogg格式,剩下的wav格式就行(虽然推荐wvb,但我没找到),常见的比如mp3貌似pygame支持的不算很好。
转文件格式的网站:链接,在线转,感觉海星。

将准备好的三个音频准备好,在代码文件夹alien中新建一个music文件夹,将三个音频分别命名放好。
bg_music:背景音乐
boom:子弹打中飞船
bullet:子弹发射

随后我们将相对路径放在setting中,同时设置了一些其他的变量:

        """音效设置"""   #音频文件路径self.bullet_music = "./alien/music/bullet.wav"self.boom_music = "./alien/music/boom.wav"self.bg_music = "./alien/music/bg_music.ogg"#音量设置self.load = 0.5     #0~1

相对路径的问题,去看我上一篇博客。

背景音乐

背景音乐是随时随地都要播放的,同时我选择的是循环播放。

    #播放音乐pygame.mixer.music.load(ai_setting.bg_music)pygame.mixer.music.set_volume(ai_setting.load)           #设置音量pygame.mixer.music.play(-1)

直接扔代码吧。
第一行是导入音频地址,第二行是设置音量,都是采用设置类里面的参数(音量是从0到1)。
第三行是播放,play有两个参数,第一个是循环次数,如果为-1则循环播放;
另一个参数start还要看音频的格式,ogg的单位为秒。

如果对music的其他内容感兴趣,分享一篇dl的博客。

其他音频

其实还想对飞船碰到外星人和外星人碰到底部以及游戏结束的时候分别添加,但是套路都一样,这里我们拿子弹发射作为例子

因为屏幕上的子弹总数只有三个,所以不能选择检测到按下空格就播放,我选择的是在向子弹编组添加内容的时候进行播放,这样目标就是game_function中的fire_bullet函数。

我写了一个fire——music函数,在添加子弹的时候调用函数。

def fire_music(path,stats):sound = pygame.mixer.Sound(path)if(stats.level > 10):sound.set_volume(1)else:sound.set_volume(0.1*stats.level)sound.play()

解释:
首先,我们不能再使用之前的方法了,因为如果还使用的话在播放后面的音频就会使背景音乐停止,这不是我们想要的效果,所以我使用了另外一个方法:
pygame.mixer.Sound方法创建了sound对象。

同时我不希望就只能播放音乐这样无聊,所以我将音量设置为和等级线性相关,这样就能在等级上升的同时提高音量。当然了,因为最大音量就是1,所以我添加了一个判断条件。

基本上流程都差不多。

其他情况

如果是子弹击中外星人,那么我的添加是在:check_bullet_alien_collisions函数中,因为在函数中处理了击中外星人的得分问题,使用了groupcollide方法(这部分我在之前的函数博客中也有提到),在遍历返回在字典的同时,不但处理了得分问题,还进行了音频播放,不过没有封装成函数。

    if collisions:for alien in collisions.values():#确保每一个外星人都会被算上分数,防止一个子弹对应多个外星人stats.score += ai_settings.alien_pointssb.prep_score()Sound = pygame.mixer.Sound(ai_settings.boom_music)Sound.set_volume(0.3)Sound.play()check_high_score(stats,sb)

如果是外星人碰到飞船或者碰到底部,那么我们就可以在ship_hit中处理,情况基本上相同。

py实现外星人入侵(二次开发)——2.添加音乐相关推荐

  1. 基于ZFAKA二次开发,添加PayJS支付渠道

    基于ZFAKA二次开发,添加PayJS支付渠道 项目地址:https://github.com/hiyouli/payjs-for-zfaka 关于ZFAKA,请移步:ZFAKA 免费.安全.稳定.高 ...

  2. QGIS二次开发地图添加标记添加注记Svg小图标SvgItem

    QGIS二次开发地图添加标记添加注记Svg小图标 即QgsAnnotationLayer.QgsMarkerSymbol和QgsAnnotationMarkerItem的用法,我把QGIS3.20软件 ...

  3. UG二次开发GRIP添加属性

    组件 或 零件 添加属性 entity/COMP,ent string/std(2,132),str(4,132),mold(132) string/add(2,132) entity/obj STR ...

  4. 【CAD二次开发】添加cad支持文件夹

    我们有时候自己的模板需要用到指定的字体,我们可以把字体放到插件的安装目录里,通过添加支持路径的方式来实现添加CAD字体. //添加自定义字体搜索目录string filePath = Assembly ...

  5. Mission Planner 二次开发之添加海康威视摄像机

    需求 需要在无人艇上添加海康威视的实时摄像头. 本地IP192.168.0.100 摄像头IP 192.168.0.64 用户名admin 密码nanfoon51077533 端口8000 海康配置可 ...

  6. 【Revit二次开发】添加菜单和按钮

    添加菜单和按钮 Ribbon菜单 Ribbon菜单的创建以及各种不同的button Ribbon菜单 这个类是PushButton和PulldownButton的基类. 按钮放在panel内,pane ...

  7. UG二次开发GRIP添加加工工序

    注 我不是原创,转载的 ENTITY/OBJ(25),SURF1(5000),cbnd(90),BEID ENTITY/surf2(5000)NUMBER/NUM L00: PARAM/'请您输入料厚 ...

  8. CAD二次开发-MFC对话框domal显示错误

    问题:CAD二次开发时添加MFC对话框后显示错误,显示为多重引线样式管理器. 解决:在对话框之前需要使用AfxGetResourceHandle和AfxSetResourceHandle进行模块资源切 ...

  9. VSTO Office二次开发PPTRibbonX命令操作及对象添加

    VSTO Office二次开发PPTRibbonX命令操作及对象添加 本篇分享对于Power Point中一些命令的操作和对于一些比较常用对象.特殊对象的添加功能. 对于Power Point命令操作 ...

  10. shopxo二次开发:商品管理添加、商品导入库存、设置库存量(教程)

    shopxo二次开发:商品添加与库存设置(教程如下) 商品添加与库存设置的一系列的操作说明: 步骤 · 如下: 商品添加与库存设置的一系列的操作说明: 商品管理.商品添加.商品类型设置.商品导入库存. ...

最新文章

  1. 调查:台湾上班族讨厌5种年会状况 最怕老板致词长
  2. 基于JAVA+SpringMVC+MYSQL的数码商城
  3. JavaScript中注册时间处理程序的方式
  4. Android wpa_supplicant 四次握手 流程分析
  5. 强悍的 ubuntu —— 窗口界面管理与设置
  6. linux ssl 脚本 51cto,升级opensslopenssh的shell脚本
  7. mysql error 1017_[转载]解决 mysql ERROR 1017:Can t find file解决错误
  8. matlab设计滤波器
  9. 漂亮好听的蓝牙小音箱,真是郊游好玩伴,Sanag M11体验
  10. 秒杀系统企业级实战应用之真实工业界案例视频
  11. 计算机找不到家庭网络连接,电脑找不到家里的wifi无线网络怎么办?
  12. css选择器的权值与优先规则
  13. AMADA阿玛达JAE工控机维修UT5-AMD9-B故障汇总
  14. 《每日一套题·提升你我能力》· 第五篇
  15. Pluecker coordinates普吕克坐标系介绍
  16. Java 常用的基本关键字和常用单词
  17. 换了工作城市,社保和公积金的转移
  18. Linux三剑客用法整理
  19. 10-3 获取日历时间
  20. WINDOWS开机11大进程

热门文章

  1. ERP/MIS系统中集成命令行式的功能调用
  2. prim算法_数据结构与算法:图形结构
  3. System.Core, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e, Retargetable=Yes”
  4. oracle一些基本函数
  5. Linux安装Intel无线网卡(Ubuntu 16.04)
  6. Google Cardboard
  7. mv或者cp带小括号文件名解析问题总结
  8. linux 使用cp卡死,细说CP使用
  9. iMeta | 扬州大学杜予州团队揭示同域内同食物的两种昆虫肠道微生物群落装配机制...
  10. Padstack Editor 17.4 - document