用Python和Pygame写游戏-从入门到精通(21)

来源:互联网 发布:js获取pdf文件大小 编辑:程序博客网 时间:2024/06/07 06:37

用Python和Pygame写游戏-从入门到精通(21)

辛苦啦~ 这次是我们系统的pygame理论学习的最后一章了,把这次的音乐播放讲完了,pygame的基础知识就全部OK了。不过作为完整的教程,只有理论讲解太过枯燥了,我随后还会加一个或更多的实践篇系列,看需要可能也会追加真3D等额外的内容。

就像上次所说的,pygame.mixer并不适合播放长时间的音乐播放,我们要使用pygame.mixer.music。

pygame.mixer.music用来播放MP3和OGG音乐文件,不过MP3并不是所有的系统都支持(Linux默认就不支持MP3播放),所以最好还是都用Ogg文件,我们可以很容易把MP3转换为Ogg文件,自己搜一下吧。

我们使用pygame.mixer.music.load()来加载一个文件,然后使用pygame.mixer.music.play()来播放,这里并没有一个类似Music这样的类和对象,因为背景音乐一般般只要有一个在播放就好了不是么~不放的时候就用stop()方法来停止就好了,当然很自然有类似录影机上的pause()和unpause()方法。

音效和音乐方法总结

Sound对象

方法名作用fadeout淡出声音,可接受一个数字(毫秒)作为淡出时间get_length获得声音文件长度,以秒计get_num_channels声音要播放多少次get_volume获取音量(0.0 ~ 1.0)play开始播放,返回一个Channel对象,失败则返回Noneset_volume设置音量stop立刻停止播放

Channels对象

方法名作用fadeout类似get_busy如果正在播放,返回trueget_endevent获取播放完毕时要做的event,没有则为Noneget_queue获取队列中的声音,没有则为Noneget_volume类似pause暂停播放play类似queue将一个Sound对象加入队列,在当前声音播放完毕后播放set_endevent设置播放完毕时要做的eventset_volume类似stop立刻停止播放unpause继续播放

Music对象:

方法名作用fadeout类似get_endevent类似get_volume类似load加载一个音乐文件pause类似play类似rewind从头开始重新播放set_endevent类似set_volume类似stop立刻停止播放unpause继续播放get_pos获得当前播放的位置,毫秒计

虽然很简单,不过还是提供一个例程吧,这里面音乐的播放很简单,就是上面讲过的,不过其中还有一点其他的东西,希望大家学习一下pygame中按钮的实现方法。

界面如上,运行的时候,脚本读取./MUSIC下所有的OGG和MP3文件(如果你不是Windows,可能要去掉MP3的判断),显示的也很简单,几个控制按钮,下面显示当前歌名(显示中文总是不那么方便的,如果你运行失败,请具体参考代码内的注释自己修改):

这个程序虽然可以运行,还是很简陋,有兴趣的可以改改,比如显示播放时间/总长度,甚至更厉害一点,鼠标移动到按钮上班,按钮会产生一点变化等等,我们现在已经什么都学过了,唯一欠缺的就是实践而已!

所以下一次,我将开始一个实战篇,用pygame书写一个真正可以玩的游戏,敬请期待~~

本次使用的几个图像文件打包下载(也可以自己找更帅的)。

0 0