用Python和Pygame写游戏-从入门到精通(20)
来源:互联网 发布:我知我行征文 编辑:程序博客网 时间:2024/06/06 05:17
用Python和Pygame写游戏-从入门到精通(20)
紧接着上一次,我们继续来看如何在Pygame中使用声音。
Sound对象
在初始化声音系统之后,我们就可以读取一个音乐文件到一个Sound对象中了。pygame.mixer.Sound()接受一个文件名,或者也可以使一个文件对象,不过这个文件必须是WAV或者OGG,切记!
一旦这个Sound对象出来了,你可以使用play方法来播放它。play(loop, maxtime)可以接受两个参数,loop自然就是重复的次数,-1意味着无限循环,1呢?是两次,记住是重复的次数而不是播放的次数;maxtime是指多少毫秒后结束,这个很简单。当你不使用任何参数调用的时候,意味着把这个声音播放一次。一旦play方法调用成功,就会返回一个Channel对象,否则返回一个None。
Channel对象
Channel,也就是声道,可以被声卡混合(共同)播放的数据流。游戏中可以同时播放的声音应该是有限的,pygame中默认是8个,你可以通过pygame.mixer.get_num_channels()来得知当前系统可以同时播放的声道数,而一旦超过,调用sound对象的play方法就会返回一个None,如果你确定自己要同时播放很多声音,可以用set_num_channels()来设定一下,最好一开始就设,因为重新设定会停止当前播放的声音。
那么Channel对象有什么用呢?如果你只是想简单的播放一下声音,那么根本不用管这个东西,不过如果你想创造出一点有意境的声音,比如说一辆火车从左到右呼啸而过,那么应该是一开始左声道比较响,然后相当,最后右声道比较响,直至慢慢消失。这就是Channel能做到的事情。Channel的set_volume(left, right)方法接受两个参数,分别是代表左声道和右声道的音量的小数,从0.0~1.0。
竖起我们的耳朵
OK,来个例子试试吧~
这个例子里我们通过释放金属小球并让它们自由落体和弹跳,听碰撞的声音。这里面不仅仅有这次学习的声音,还有几个一起没有接触到的技术,最重要的一个就是重力的模拟,我们可以设置一个重力因子来影响小球下落的速度,还有一个弹力系数,来决定每次弹跳损失的能量,虽然不难,但是游戏中引入这个东西能让我们的游戏仿真度大大提高。
这么久了,咱们的游戏终于有了声音,太棒了!不过,是不是游戏的背景音乐也是用mixer来播放的呢?这不是一个好主意,因为背景音乐往往很长,比较占资源,pygame中另外提供了一个pygame.mixer.music类来控制背景音乐的播放,这也是我们下一次要讲的内容。
- 用Python和Pygame写游戏-从入门到精通
- 用Python和Pygame写游戏-从入门到精通
- 用Python和Pygame写游戏-从入门到精通
- 用Python和Pygame写游戏-从入门到精通
- 用Python和Pygame写游戏-从入门到精通
- 用 Python 和 Pygame 写游戏 - 从入门到精通
- 用Python和Pygame写游戏-从入门到精通(20)
- 用Python和Pygame写游戏-从入门到精通(20)
- 用Python和Pygame写游戏-从入门到精通(20)
- 用Python和Pygame写游戏-从入门到精通(20)
- 用Python和Pygame写游戏-从入门到精通(13)简单的AI游戏
- Pygame 教程:《用 Python 和 Pygame 写游戏 - 从入门到精通》
- Pygame 教程:《用 Python 和 Pygame 写游戏 - 从入门到精通》
- 用Python和Pygame写游戏-从入门到精通(1)
- 用Python和Pygame写游戏-从入门到精通(17)
- 用Python和Pygame写游戏-从入门到精通(1)
- 用Python和Pygame写游戏-从入门到精通(2)
- 用Python和Pygame写游戏-从入门到精通(1)
- QT 多线程程序设计
- 结构型设计模式---外观模式(Facade)
- eclipse使用技巧
- 凯里哪家男科医院好
- 基于微信公众平台的开发(清华大学第二讲)
- 用Python和Pygame写游戏-从入门到精通(20)
- 牟为松说话算数吗?
- 强烈推荐:240多个jQuery插件
- 二分查找全集
- mysql的group by、order by和having、where比较
- Coder(暴力)
- 黑马程序员————交通灯管理系统(第九篇)
- 失业在家的学习笔记-第二天
- hdu4940 有上下界的无源可行流判断