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()类型的对象.用来处理文本内容
其主要步骤如下:
- 创建Font对象
myfont = pygame.font.Font("msyh.ttf", 32) # 用程序目录下的msyh.ttf字体文件
myfont = pygame.font.SysFont("msyh", 32) # 用系统字体
参数说明:
- 第一个参数: 字体文件
- 第二个参数: 字大的大小
- 创建文本surface对象
font_surface = myfont.sender("我是爱编程的章老师", True, BLUE,background = None)
参数说明:
- 第一个参数:要显示的内容
- 第二个参数:是否以抗锯齿的方式显示,True:抗锯齿, False:不抗锯齿
- 第三个参数: 显示文本的颜色
- 第四个参数: 背景
- 显示到屏幕上
screen.blit(font_surface, (0,0))
参数说明:
blit()用来将一个Surface对象贴到屏幕上
- 第一个参数:Surface对象
- 第二个参数: 对象左上角在屏幕上的坐标
- 更新屏幕
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()
效果图如下:
关于字体/字体文件
在设计游戏的时候,一般为了保证程序中的字体能够正常显示(仿止系统自带的字体没有我们设计时的字体),一般我们会将字体文件打包到游戏程序中.也就是在字体文件作为程序的一部分,复制到程序目录下.
或者为了节省空间,我们可以在设计程序的时候,设计一个默认的字体,再设计几个系统自带的常用的字体作为备用字体,以便我们正常显示文本
注意:
当程序找不到我们指定的字体文件的时候,程序会报错,
当程序找不到我们指定的字体的时候,只是会以方块的形式代替文本内容
自带字体处理
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()
效果图如下:
后记:
- 文本显示的三个步骤
- 创建Font对象
- 创建文本Surface对象
- 绘制文本Surface
- 字体的两种操作逻辑
- 引用本地方ttf文件 Font(路径, 大小)
- 引用系统字体SysFont(字体名, 大小)