pygame 的字体使用

Posted liquancai

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pygame 的字体使用相关的知识,希望对你有一定的参考价值。

pygame 的字体使用

pygame 可以直接调用系统字体,也可以调用 TTF 字体。为了使用字体,应该首先创建一个 Font 对象(不要忘记初始化 pygame),对于系统自带的字体应该这样调用:

font1 = pygame.font.SysFont(‘arial‘, 16)

第1个参数是字体名,第2个参数是字号。在正常情况下系统里都有 arial 字体,如果没有会使用默认字体,默认字体和用户使用的系统有关。

用户可以使用 pygame.font.get_fonts() 来获取当前系统所有可用的字体。

另外还有一种调用方法是使用自己的 TTF 字体:my_font = pygame.font.Font(‘my_font.ttf‘, 16)

这个方法的好处是可以把字体文件和游戏一起打包分发,避免玩家计算机上没有这个字体而无法显示的问题。一旦有了 Font 对象,就可以使用 render() 方法来设置文本内容,然后通过 blit() 方法写到屏幕上。

text = font1.render("坦克大战", True, (0, 0, 0), (255, 255,255))

render() 方法的第1个参数是写入的文本内容;第2个参数是布尔值,说明是否开启抗锯齿;第3个参数是字体本身的颜色;第4个参数是背景的颜色。如果不想有背景色,也就是让背景透明,可以不加第4个参数。

例如自己定义一个文字处理函数 show_text(), 其中参数 surface_handle 是 surface 句柄,pos 为文字显示位置,corlor 为文字颜色,font_size 为字体大小,font_bold 为文字是否加粗,font_italic 为文字是否斜体。

def show_text(surface_handle, pos, text, color, font_size = 13, font_bold = False, font_italic = False):
    # cur_font = pygame.font.SysFont(‘宋体‘, font_size)		# 获取系统字体
    cur_font = pygame.font.Font(‘simafang.ttf‘, 30)			 # 获取字体,并设置大小
    cur_font.set_bold(font_bold)							 # 设置是否加粗
    cur_font.set_italic(font_italic)						 # 设置是否斜体
    text_fmt = cur_font.render(text, 1, color)				 # 设置文本内容
    surface_handle.blit(text_fmt, pos)						 # 绘制文字

在更新窗口内容 pygame.display.update() 之前加入:

text = "坦克大战"
show_text(screen, (20, 220), text, (255, 0, 0), True)
text = "坦克位置:(%d, %d)" % (tank_rect.left, tank_rect.top)
show_text(screen, (20, 420), text, (0, 255, 255), True)

此时会在屏幕的(20,220)处显示红色的“坦克大战”文字,并且在(20,420)显示现在坦克所处位置的座标,移动坦克,位置座标文字随之改变。

完整代码如下:

import pygame


def show_text(surface_handle, pos, text, color, font_size = 20, font_bold = False, font_italic = False):
    cur_font = pygame.font.SysFont("华文宋体", font_size)
    cur_font.set_bold(font_bold)
    cur_font.set_italic(font_italic)
    text_message = cur_font.render(text, 1, color)
    surface_handle.blit(text_message, pos)


def tank_play():
    pygame.init()
    tank_image = pygame.image.load(r"../images/tank.png")
    tank_rect = tank_image.get_rect()
    back_image = pygame.image.load(r"../images/background2.jpg")
    back_rect = back_image.get_rect()
    screen = pygame.display.set_mode(back_rect.size)
    pygame.display.set_caption("用户方向键控制坦克移动")
    tank_rect.center = back_rect.center
    offset = 2                            
    fps_clock = pygame.time.Clock()
    while True:
        fps_clock.tick(60)
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                exit()
        keys_pressed = pygame.key.get_pressed()
        if keys_pressed[pygame.K_RIGHT]:
            tank_rect.x += offset
        if keys_pressed[pygame.K_LEFT]:
            tank_rect.x -= offset
        if keys_pressed[pygame.K_UP]:
            tank_rect.y -= offset
        if keys_pressed[pygame.K_DOWN]:
            tank_rect.y += offset
        tank_rect.clamp_ip(back_rect)
        screen.blit(back_image, back_rect)
        screen.blit(tank_image, tank_rect)

        text = "坦克大战"
        show_text(screen, (20, 220), text, (255, 0, 0))
        text = f"坦克位置:({tank_rect.x},{tank_rect.y})"
        show_text(screen, (20, 250), text, (0, 255, 255))
        pygame.display.update()


if __name__ == ‘__main__‘:
    tank_play()
    

程序运行结果如下所示:

技术图片

以上是关于pygame 的字体使用的主要内容,如果未能解决你的问题,请参考以下文章

python怎样在pygame中设置字体并显示中文

Pygame Python 字体大小

pygame - 如何用字体和颜色显示文本?

pygame字体

pygame字体

pygame学习记录 字体显示