我在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!"
的宽度大于零。我该如何解决这个问题?
答案 0 :(得分:1)
我找到了一个对我有用的解决方案:只需在调用pygame.display.quit()
之前删除字体元素,即每次使用它时只删除del font
。
font元素是您使用以下命令创建的:
font.SysFont("Comic Sans MS", 12)
但我个人使用pygame.font.Font(None, font_size)
答案 1 :(得分:0)
问题是在程序完成之前调用了pygame.quit()
。这会导致每个 Pygame模块(例如pygame.font
)未初始化。
不是依靠pygame.quit
关闭Pygame显示,而是在每个pygame.display.quit
循环结束时使用while running
。然后将pygame.quit
放在脚本的最末端,以便在其他模块完成使用后卸载它们。
(在呈现文本之前再次调用pygame.init()
也不会解决此问题,因为它会导致Pygame显示停止响应。(这可能是Pygame 1.9.2的错误)