Pygame(十一)文字

Pygame(十一)文字

前言

游戏开发中,所有的显示内容最终都是以图像的方式显示出来的.
因此,需要用专用的方法来处理文字与图像之间的转换逻辑

本内提要

本节提要

内容详情

我的标题栏我做主

先看一下最小pygame框架

def change_title():
    pygame.init()
    s = pygame.display.set_mode((800 ,600))
    while 1:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                sys.exit()

效果图如下
默认标题栏

如图所示,为什么我们开发的游戏作品,显示的确是pygame window呢?

让我们一起动手抢回我们标题栏吧

pygame.display.set_caption(string)  # 用这个就可以修改我们的标题栏了

示例代码

def change_title():
    pygame.init()
    s = pygame.display.set_mode((800 ,600))
    pygame.display.set_caption("我的标题栏,我做主")
    while 1:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                sys.exit()

效果图如下
修改后的标题栏

显示文字

那如何在游戏主窗口中显示文本内容呢?
要想显示文本内容,主角是pygame.font.Font()
我们需要实例创建一个Font()类型的对象.用来处理文本内容
其主要步骤如下:

  1. 创建Font对象
myfont = pygame.font.Font("msyh.ttf", 32)  # 用程序目录下的msyh.ttf字体文件
myfont = pygame.font.SysFont("msyh", 32) # 用系统字体

参数说明:

  • 第一个参数: 字体文件
  • 第二个参数: 字大的大小
  1. 创建文本surface对象
font_surface = myfont.sender("我是爱编程的章老师", True, BLUE,background = None)

参数说明:

  • 第一个参数:要显示的内容
  • 第二个参数:是否以抗锯齿的方式显示,True:抗锯齿, False:不抗锯齿
  • 第三个参数: 显示文本的颜色
  • 第四个参数: 背景
  1. 显示到屏幕上
screen.blit(font_surface, (0,0))

参数说明:
blit()用来将一个Surface对象贴到屏幕上

  • 第一个参数:Surface对象
  • 第二个参数: 对象左上角在屏幕上的坐标
  1. 更新屏幕
pygame.display.update()

完整示例

def show_text1():
    pygame.init()
    s = pygame.display.set_mode((800, 600))
    pygame.display.set_caption("我的标题栏,我做主")

    # myfont = pygame.font.Font("fangsong.ttf", 32)
    my_font = pygame.font.SysFont("fangsong", 32)  # 用了系统自带的仿宋体
    author = my_font.render("我是爱编程的章老师", True, (0, 0, 255))
    s.blit(author, (400, 300))
    pygame.display.update()
    while 1:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                sys.exit()
if __name__ == '__main__':
    show_text1()

效果图如下:
显示文本内容1

关于字体/字体文件

在设计游戏的时候,一般为了保证程序中的字体能够正常显示(仿止系统自带的字体没有我们设计时的字体),一般我们会将字体文件打包到游戏程序中.也就是在字体文件作为程序的一部分,复制到程序目录下.
或者为了节省空间,我们可以在设计程序的时候,设计一个默认的字体,再设计几个系统自带的常用的字体作为备用字体,以便我们正常显示文本
注意:
当程序找不到我们指定的字体文件的时候,程序会报错,
当程序找不到我们指定的字体的时候,只是会以方块的形式代替文本内容

自带字体处理

my_font = pygame.font.Font("src/fonts/msyh.ttf", 32)

目录结构
目录结构

与程序主体同目录下,新建了一个src目录用来存入资源文件,再src目录下有个fonts目录专门用来存放字体文字.
当然,根据个人的习惯 ,也可以直接将字体文件扔到程序主体同目录下.

系统字体

如果不想复制字体来增加程序大小,可以采用系统自带的字体
这个时候,可以先获取系统中自带的有哪些字体

fonts = pygame.font.get_fonts()

获取的是一个系统的字体名列表
这个时候,可以将我们想要用的字体在列表里找一下,如果能够找到,就采用这个字体

fonts = pygame.font.get_fonts()
if "msyh" in fonts:
    my_font = pygame.font.SysFont("msyh", 32)
elif "fangsong" in fonts:
    my_font = pygame.font.SysFont("fangsong", 32)

完整示例代码:

def show_text1():
    pygame.init()
    s = pygame.display.set_mode((800, 600))
    pygame.display.set_caption("我的标题栏,我做主")

    # my_font = pygame.font.Font("msyh.ttf", 32)
    fonts = pygame.font.get_fonts()
    if "msyh" in fonts:
        my_font = pygame.font.SysFont("msyh", 32)
    elif "fangsong" in fonts:
        my_font = pygame.font.SysFont("fangsong", 32)
    author = my_font.render("我是爱编程的章老师", True, (0, 0, 255))
    s.blit(author, (400, 300))
    pygame.display.update()
    while 1:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                sys.exit()

字体样式

样式方法
加粗set_bold(True)
斜体set_italic(True)
下划线set_underline(True)

示例

def show_text1():
    pygame.init()
    s = pygame.display.set_mode((800, 600))
    pygame.display.set_caption("我的标题栏,我做主")

    # my_font = pygame.font.Font("msyh.ttf", 32)
    fonts = pygame.font.get_fonts()
    if "msyh" in fonts:
        my_font = pygame.font.SysFont("msyh", 32)
    elif "fangsong" in fonts:
        my_font = pygame.font.SysFont("fangsong", 32)
    my_font.set_bold(True) # 设置加粗
    my_font.set_italic(True)  # 设置斜体
    my_font.set_underline(True)  # 设置下划线
    author = my_font.render("我是爱编程的章老师", True, (0, 0, 255))
    s.blit(author, (400, 300))
    pygame.display.update()
    while 1:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                sys.exit()

效果图如下:
字体样式

后记:

  1. 文本显示的三个步骤
  • 创建Font对象
  • 创建文本Surface对象
  • 绘制文本Surface
  1. 字体的两种操作逻辑
  • 引用本地方ttf文件 Font(路径, 大小)
  • 引用系统字体SysFont(字体名, 大小)
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱编程的章老师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值