在Pygame

时间:2017-01-08 18:03:01

标签: fonts pygame

我正在使用Pygame中的神奇宝贝式对话框。我正在使用Pokemon GB字体,但由于某种原因,文字被裁剪在顶部。看起来pygame.font.Font.size无法正确计算呈现文本所需的Surface大小。

This screenshot显示了它应该是什么样子。

import pygame

pygame.init()

window = pygame.display.set_mode((640, 192))
window.fill((255, 255, 255))

POKEFONT = pygame.font.Font("Pokemon GB.ttf", 32)
positions = [[32, 64], [36, 128]]
lines = ["Hello there!", "Welcome to the"]

for line, pos in zip(lines, positions):
    text = POKEFONT.render(line, True, (0, 0, 0))
    rect = text.get_rect()
    rect.topleft = pos
    window.blit(text, rect)

while True:

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            exit()

    pygame.display.update()

PKMN RBYGSC字体看起来几乎相同但渲染正确。发生了什么事?

1 个答案:

答案 0 :(得分:2)

解决方案是使用从Pygame 1.9.2开始提供的pygame.freetype

PKMN RBYGSC位于左侧,Pokemon GB位于右侧。感叹号穿过口袋妖怪GB中的最大上升线和基线(有关术语,请参阅this page)。看起来pygame.font忽略了那些行之外的任何内容,但pygame.freetype没有。

此代码的修改版本给出了正确的结果:

import pygame.freetype 

pygame.init()

window = pygame.display.set_mode((640, 192))
window.fill((255, 255, 255))

POKEFONT = pygame.freetype.Font("Pokemon GB.ttf", 32)
positions = [[32, 64], [36, 128]]
lines = ["Hello there!", "Welcome to the"]

for line, pos in zip(lines, positions):
    text, rect = POKEFONT.render(line, (0, 0, 0))
    rect.topleft = pos
    window.blit(text, rect)

while True:

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            exit()

    pygame.display.update()