Pygame 字体和文本

Pygame 字体和文本

字体在游戏中也扮演着生要的角色。比如显示得分,角色之间的对话等等。
Pygame中字体使用".ttf"文件,它代表 True Type File。

字体和文本

在pygame中使用字体一般有两种不同的方式。

  1. pygame.font.Font()
  2. pygame.font.SysFont()。
    它们两者之间的区别在于,pygame.font.Font()需要将字体的文件路径传递到它的参数中,而pygame.font.SysFont()只需要字体的名称。

Pygame.font.Font()

pygame.font.Font() 主要用来使用系统之外的字体文件。例如,如果您在与 python 文件相同的目录中有一个xx.ttf的文件,则可以使用如下代码使用。

pygame.font.Font("xx.ttf", 20)

第一个参数是文件路径,第二个是字体大小。

这样做的明显好处是您选择的字体不可能不可用。

您可以做的另一件事就是让您的程序从一开始就使用系统默认字体。此方法 100% 无错误,并且不容易出现任何“丢失字体”问题。

font = pygame.font.Font(None, size)

请记住,系统默认字体因系统而异。

可能会出现找不到您指定的字体类型或发生某些错误的情况。在这种情况下,pygame 将回退到默认系统字体。

Pygame.font.SysFont()

如果你没有包含任何ttf文件,那么可以使用pygame.font.SysFont()。

一个好的策略是首先找到执行代码的系统支持的字体。pygame.font.get_fonts() 函数将返回它可以在您的系统上找到的所有字体名称的列表。我们在 Windows 桌面上运行代码,收到以下输出。

['arial', 'arialblack', 'bahnschrift', 
'calibri', 'cambriacambriamath', 'cambria', 
......
]

不同的系统会有不同的输出结果。接下一来可以简单地选择一个,并将其传递给SysFont()函数。

使用系统字体

chat_font = pygame.font.SysFont('arial', 15)
name_font = pygame.font.SysFont('Helvetica', 20)
game_over_font = pygame.font.SysFont('Verdana', 60)

SysFont()函数只需要字体的名称,不需要文件路径。第二个参数保持不变,表示字体大小。

如您所见,我们已经创建了几种类型的字体。原因是在普通游戏中,文本的不同部分会使用许多不同类型的字体。在整个游戏中使用相同类型的字体系列和大小是非常不寻常的。

例如,我们使用相当小的字体大小为对话创建了一种字体类型。对于许多游戏都有的“GAME OVER”文本,我们使用了更大的字体。我们甚至为names创建了一种不同的字体,其字体大小比文本稍大(以使其突出一点)。

chat = chat_font.render("Hey there, Beautiful weather today!",
                                True, (0,0,0))
name = name_font.render("John Hubbard", True, (0,0,255))
game_over = game_over_font.render("Game Over", True, (255,0,0))

定义字体只是第一步。接下来,要用字体创建一个Surface对象。您还可以在渲染时决定颜色。True参数代表anti-aliasing,用于使边缘更平滑。如果要使用它,请传递True ,否则传递False。

screen.blit(dialogue, (40,40))
screen.blit(name, (40,140))
screen.blit(game_over, (40,240))

最后一步是在屏幕上实际显示对象。为此,我们使用surface.blit()函数。

Pygame 字体示例

现在我们实际上将上面显示的所有代码放在一个综合程序中并向您展示输出。

我们程序的代码。

import pygame

pygame.init()
#定义颜色
CHAT_COLOR = (0,0,0)
NAME_COLOR = (0,0,255)
GAME_OVER_COLOR = (255,0,0)

screen = pygame.display.set_mode((400, 400))
clock = pygame.time.Clock()

chat_font = pygame.font.SysFont('arial', 15)
name_font = pygame.font.SysFont('Helvetica', 20)
game_over_font = pygame.font.SysFont('Verdana', 60)

chat = dialogue_font.render("Hello,nict to meet you!",True, CHAT_COLOR)
name = name_font.render("ubuntu", True,NAME_COLOR )
game_over = game_over_font.render("Game Over", True, GAME_OVER_COLOR)

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
    
    screen.fill((255, 255, 255))
    screen.blit(dialogue, (40,40))
    screen.blit(name, (40,140))
    screen.blit(game_over, (40,240))
    
    pygame.display.flip()
    clock.tick(60)
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值