我在 Pygame 1.9.2 中有一个项目,我多次重新初始化显示,并将文本绘制到显示表面。 在我关闭 Pygame 显示并再次重新初始化它之前,它工作正常。
它遵循这样的结构:
from pygame import *
init() # this is pygame.init()
running = True
while running:
display.set_mode((800,600))
visible = True
textFont = font.SysFont("Comic Sans MS", 12)
while visible:
for evt in event.get():
if evt.type == QUIT:
visible = False
if evt.type == KEYDOWN:
if evt.key == K_ESCAPE:
visible = running = False
textPic = textFont.render("Hello world!", True, (255,255,255))
display.get_surface().blit(textPic, (0,0))
display.flip()
quit()
该程序一直工作到显示器第一次关闭然后重新初始化,之后我在尝试使用 textFont.render
时收到以下错误:
pygame.error: Text has zero width
我正在扯头发,试图弄清楚出了什么问题...我知道"Hello world!"
的宽度大于零。 如何解决此问题?
问题是pygame.quit()
是在程序完成之前调用的。 这会导致每个 Pygame 模块(例如 pygame.font
) 为未初始化。
与其依靠pygame.quit
来关闭 Pygame 显示,不如在每个while running
循环结束时使用 pygame.display.quit
。 然后将pygame.quit
放在脚本的最后,以便在使用完其余模块后卸载其余模块。
(在呈现文本之前再次调用pygame.init()
也无法解决此问题,因为它会导致 Pygame 显示停止响应。 (这可能是 Pygame 1.9.2 的错误)
我找到了一个适合我的解决方案:只需在调用 pygame.display.quit()
之前删除 font 元素,即每次使用它时都del font
。
font 元素是您使用以下命令创建的元素:
font.SysFont("Comic Sans MS", 12)
但我个人使用pygame.font.Font(None, font_size)
创建