我正在使用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字体看起来几乎相同但渲染正确。发生了什么事?
答案 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()