pygame是主要构筑在SDL库基础上的一组Python模块的集合,它使我们能够用Python语言来创建功能完整的游戏和多媒体程序。pygame是高度括平台可移植的,在任何SDL支持的平台上都可以运行(几乎可以在任何平台和操作系统上运行)。
注:SDL(Simple DirectMedia Layer)是一个跨平台的多媒体库,可以用来访问底层的音频、键盘、鼠标、摇杆、3D硬件(通过OpenGL)以及2D视频缓冲。它被用在MPEG播放软件、模拟器和很多流行的游戏中,包括获得大奖的Linux版的”Civilization: Call To Power”。
安装Pygame
https://www.pygame.org/wiki/GettingStarted
导入
| 
 | 
 | 
模块
| 模块 | 说明 | 
|---|---|
| cdrom | 访问光驱 | 
| cursors | 加载光标图像,包含标准光标 | 
| display | 控制显示窗口或屏幕 | 
| draw | 在Surface上绘制简单的图形 | 
| event | 管理事件和事件队列 | 
| font | 创建并呈现TrueType字体 | 
| image | 保存并加载图像 | 
| joystick | 管理游戏手柄设备 | 
| key | 管理键盘 | 
| pygame.mixer | 音效 | 
| mouse | 管理鼠标 | 
| pygame.movie | 播放视频 | 
| pygame.music | 播放音频 | 
| pygame.rect | 管理矩形区域 | 
| pygame.sprite | 操作移动图像 | 
| sndarray | 用numpy操纵声音 | 
| surfarray | 用numpy处理图像 | 
| time | 控制时间 | 
| transform | 缩放,旋转和翻转图像 | 
初始化和退出
| 
 | 
 | 
窗口/suiface pygame.display
pygame.display模块用于创建、管理游戏窗口
需要先创建一个窗口。其他的活动都是基于窗口的
| 
 | 
 | 
- resolution:指定屏幕的宽和高,默认创建的窗口大小和屏幕大小一致
- flags:标志位- FULLSCREEN 创建一个全屏窗口
- DOUBLEBUF 创建一个“双缓冲”窗口,建议在HWSURFACE或者OPENGL时使用
- HWSURFACE 创建一个硬件加速的窗口,必须和FULLSCREEN同时使用
- OPENGL 创建一个OPENGL渲染的窗口
- RESIZABLE 创建一个可以改变大小的窗口
- NOFRAME 创建一个没有边框的窗口
 
- depth:颜色的位深,默认自动匹配
| 
 | 
 | 
游戏循环
如果没有循环,窗口无法保持,只能看到一闪而过
一个游戏循环(也可以称为主循环)就做下面这三件事:
- 处理事件
- 更新游戏状态
- 绘制游戏状态到屏幕上
| 
 | 
 | 
| 
 | 
 | 
坐标系
以左上角为(0,0)点,往右方向为X轴,往下方向为Y轴,单位为像素
矩形区域 pygame.Rect
pygame.Rect是用于存储直角坐标的pygame对象,在游戏中所有可见的元素都是以矩形区域来描述位置的(区别于绘制图形中的矩形)
对象
前两项描述位置,后两项描述大小
属性
绘制图形 pygame.draw
| 
 | 
 | 
实例

字体/文本 pygame.font
pygame.font模块将文本打印到窗口
| 
 | 
 | 
| 
 | 
 | 

图像
| 
 | 
 | 
| 
 | 
 | 
音频
背景音乐
| 
 | 
 | 
filename:音频文件的文件名
该方法用来加载背景音乐,之后调用 pygame.mixer.music.play( ) 方法就可以播放背景音乐(Pygame 只允许加载一个背景音乐在同一个时刻)
音乐文件可以很大,系统以流的形式播放
| 
 | 
 | 
| 
 | 
 | 
循环播放
特效声音
要在游戏中播放碰撞、爆炸、语音等音效,需要使用pygame.mixer模块。这个模块支持同时播放多个音效文件,多个文件在多个不同的通道Channel中播放,一个通道一次只能播放一个音效文件。
音效和音乐的区别是:音效要整个文件载入到Sound对象中才能播放,而音乐不用完全载入,而以流的方式播放。
说了这么多,实际上只需要两句就足够了
视频 pygame.movie
https://stackoverflow.com/questions/37775635/pygame-movie-missing
该模块已经过时
要在游戏中播放片头动画、过场动画等视频画面,可以使用pygame.movie模块
要播放视频中的音乐,pygame.movie模块需要对音频接口的完全控制,不能初始化mixer模块。因此要这样完成初始化~~
或者只初始化
| 
 | 
 | 
动画
帧率(Frame rate):每秒钟能够刷新的次数
| 
 | 
 | 
| 
 | 
 | 
事件
Pygame通过一个事件系统与用户进行交互,以及处理一些系统发生的事件。事件系统包括一个事件队列,其中每一项都是一个Event对象。所有的用户输入和一些系统事件,都会形成一个Event对象被添加到事件队列中。
Event对象有各种不同的类型,通过Event.type属性来区分。不同的类型的Event对象还有不同的其它属性。通过Event.dict属性来查看。
详细:http://www.xefan.com/archives/83586.html
| 
 | 
 | 
定时器
每隔多少时间触发一次事件
pygame中的时间是以毫秒(千分之一秒)表示的
计时器
冲突
while True: # 程序主循环
    for event in pygame.event.get():# 获取事件
        if event.type == QUIT:# 判断事件是否为退出事件
            pygame.quit()# 退出pygame
            sys.exit()# 退出系统
    pygame.display.update()# 绘制屏幕内容
参考: