
3.2 设置字体并显示文本内容

3.2 设置字体并显示文本内容
有时需要在游戏窗口中显示文本,此时可以在Pygame模块中直接调用系统字体来显示文本内容,或者直接使用TTF字体显示文本内容。在本节的内容中,将详细讲解在Pygame模块中设置字体并显示文本内容的知识。
3.2.1 设置字体
为了在Pygame模块中使用字体,需要先创建一个font对象。对于系统自带的字体来说,可以使用如下代码创建一个font对象。

在上述代码中,第一个参数是字体名,第二个参数表示大小。一般来说,“Arial”字体在很多系统都是存在的,如果找不到的话,就会使用一个默认的字体,这个默认的字体和每个操作系统相关。也可以使用pygame.font.get_fonts()函数来获得当前系统所有可用字体。
另外,还可以通过如下代码使用TTF。

在上述代码中使用了一个叫作“my_font.ttf”的字体,通过上述方法可以把字体文件随游戏一起分发,避免用户机器上没有需要的字体。一旦创建了一个Font对象,就可以通过如下代码使用render方法来写字,并且可以显示到屏幕中。

在上述代码中,第一个参数是写的文字;第二个参数是个布尔值,是否开启抗锯齿,如果是True的话字体会比较平滑,不过相应的速度会慢;第三个参数是字体的颜色;第四个参数是背景色,如果想没有背景色(也就是透明),可以不加第四个参数。
在Pygame程序中,通过如下代码可以获取Pygame支持的字体。

执行后会输出下面支持的字体。

建议在使用中文时使用上面支持的字体,只有这样才不会出现中文乱码的情形。

实例文件zi.py演示了在游戏窗口中显示指定样式文字的过程,具体实现代码如下所示。


在上述代码中,设置的字体名字是“stxihei”,是目前Pygame支持的字体,执行后的效果如图3-1所示。

图3-1 执行效果
3.2.2 使用属性Rect设置文本位置
在Pygame框架中,使用pygame.Rect(简称为Rect)表示特定大小和位置的矩形区域,可以用于设置窗口中对象的位置。开发者可以使用函数pygame.Rect()创建一个新的Rect对象。注意,函数pygame.Rect()和pygame.Rect数据类型的名称相同。与数据类型的名称相同并且创建其数据类型的对象或值的函数,叫作构造函数(constructor functions)。函数pygame.Rect()的参数是表示左上角的X坐标和Y坐标的整数,后边跟随着宽度和高度,都是以像素为单位。下面是使用函数pygame.Rect()的代码。

当创建Font对象后,就已经为其生成了一个Rect对象,接下来需要访问Rect对象。例如在下面的访问代码中,在text上使用get_rect()方法将该Rect赋值给textRect。

Rect数据类型有许多属性,用来描述它所表示的矩形。为了设置textRect在窗口上的位置,需要将其中心的x值和y值赋值为窗口上的坐标像素。由于每个Rect对象已经有了存储Rect中心的X坐标和Y坐标的属性,分别名为centerx和centery,所以我们需要做的就是赋值这些坐标值。
3.2.3 在游戏窗口中显示闪烁的文字

实例文件wenzi.py的功能是在界面上方显示一个颜色动态变化的英文文本,在下面显示一个静态的中文文本。文件wenzi.py的具体实现代码如下所示。


执行后的效果如图3-2所示。

图3-2 执行效果