
2.2 Pygame开发基础

2.2 Pygame开发基础
在成功安装Pygame框架后,接下来就可以使用这个框架开发2D游戏项目了。
2.2.1 Pygame框架中的模块
在Pygame框架中有很多模块,其中常用模块如表2-1所示。
表2-1 Pygame框架中的常用模块

(续)

2.2.2 开发第一个Pygame程序

实例文件123.py演示了开发第一个Pygame程序的过程,具体实现代码如下所示。

对上述实例代码的具体说明如下所示。
1)set_mode函数:会返回一个Surface对象,代表了在桌面上出现的那个窗口。在三个参数中,第1个参数为元组,代表分辨率(必需);第2个参数是一个标志位,具体含义如表2-2所示,如果不用什么特性,就指定0;第3个参数为色深。
表2-2 各标志位的具体含义

2)convert函数:功能是将图像数据都转化为Surface对象,每次加载完图像以后,就应该做这件事。
3)convert_alpha函数:和convert函数相比,保留了Alpha通道信息(可以简单理解为透明的部分),这样移动的光标才可以是不规则的形状。
4)游戏的主循环是一个无限循环,直到用户跳出。在这个主循环里做的事情就是不停地画背景和更新光标位置,虽然背景是不动的,但还是需要每次都画它,否则鼠标覆盖过的位置就不能恢复正常了。
Pygame游戏的主循环是一个while循环,它有一个直接为True值的条件。这意味着它不会因为该条件求得False而退出。程序执行退出的唯一方式是执行一条break语句(该语句将执行移动到循环之后的第一行代码)或者调用函数sys.exit()(它会终止程序)。如果像这样的一个循环位于一个函数中,一条return语句也可以退出循环(同时退出函数的执行)。
本书中的游戏,大都带有这样的一些while True循环,并且带有一条将该循环称为“main game loop”的注释。游戏循环(game loop,也叫作主循环main loop)中的代码做如下3件事情。
● 处理事件。
● 更新游戏状态。
● 在屏幕上绘制游戏状态。
游戏状态(game state)只不过是针对游戏程序中用到的所有变量的一组值的一种叫法。在很多游戏中,游戏状态包括了记录玩家的生命值和位置、敌人的生命值和位置、在游戏板做出的标记、分数值或者轮到谁在玩等信息的变量的值。任何时候,如玩家受到伤害(这会减少其生命值)、敌人移动到某个地方或者游戏世界中发生某些事情的时候就说明游戏的状态发生了变化。
5)blit函数:第1个参数为一个Surface对象,第2个参数为左上角位置。画完以后一定记得用update更新一下,否则画面会一片漆黑。
执行后的效果如图2-3所示。

图2-3 执行后的效果