文章目录
- 字体初始化
- 获取字体
- 字体对象
- 内置方法
字体初始化
在pygame程序中,第一步势必进行初始化,即调用pygame.init()函数,而此初始化过程,则顺便包含了字体初始化,即默不作声地调用了pygame.font.init()函数。下面通过pygame.font中的get_init()函数进行查询,结果如下
import pygame
from pygame import font
font.get_init() # False
pygame.init()
font.get_init() # True
font.quit()
font.get_init() # False
其中quit用于取消字体的初始化。
获取字体
pygame可以很方便地判断当前字体,并且能够获取系统字体,示例如下
font.get_default_font() # 'freesansbold.ttf'
lst = font.get_fonts()
print(lst[:5])
# ['arial', 'arialblack', 'bahnschrift', 'calibri', 'cambria']
font.match_font('arial')
#'C:\\WINDOWS\\Fonts\\ARIALN.TTF'
其中,
- get_default_font() 获取默认字体
- get_fonts() 获取系统所有的字体列表
- font.match_font(‘arial’) 获取系统中名为arial的字体的路径
字体对象
pygame中封装了字体类,在实例化过程中,一般需要两个参数,分别是字体路径以及文字尺寸。在初始化字体后,可通过render来渲染具体的文字。
path = 'C:\\WINDOWS\\Fonts\\ARIALN.TTF'
font.init()
f = font.Font(path, 50)
msg = f.render("FONT", True, (255, 255,255))
其中,render函数的参数如下
- text 将要展示的文字
- antialias 是否开启抗锯齿
- color 颜色,(255,255,255)表示纯白
在设置好字体后,接下来便可在主循环中展示
pygame.init()
screen = pygame.display.set_mode((400, 200))
while True:
if pygame.QUIT in [e.type for e in pygame.event.get()]:
pygame.quit()
break
screen.fill((0,0,0))
screen.blit(msg, (150, 60))
pygame.display.flip()
效果如下
内置方法
上面的FONT其实并不协调,主要是尺寸与窗口并不匹配,从而无法做到居中,为此可通过size函数获取文字所占据的像素尺寸。
# 由于上面的代码段执行了pygame.quit(),所以需要重新初始化
pygame.init()
f = font.Font(path, 50)
f.size("FONT") # (112, 58)
screen = pygame.display.set_mode((200, 100))
while True:
if pygame.QUIT in [e.type for e in pygame.event.get()]:
pygame.quit()
break
screen.fill((0,0,0))
screen.blit(msg, (44, 21))
pygame.display.flip()
效果如下
如果想获得每个文字的尺寸,则可使用metrics(text)方法,其返回值是一个列表,每个元素都代表text中的一个文字尺寸,格式为(minx, maxx, miny, maxy, advance),前四项比较好理解,advance表示前进偏移量。
另有一些获取文字尺寸的函数如下
- get_linesize() 获取字体文本的行间距
- get_height() 获取字体的高度
- get_ascent() 获取字体的上升高度,即从字体基线到字体顶部的像素数。
- get_descent() 获取字体的下降高度,即从字体基线到字体底部的像素数。
Font类中还内置了一些方法,用于设置或获取字体格式,这些方法一般由set和get成对出现
功能说明 | set | get |
---|---|---|
下划线 | set_underline(b) | get_underline() |
粗体 | set_bold(b) | get_bold() |
斜体 | set_italic() | get_italic() |