重新初始化 Pygame 显示后出现"Text has zero width"错误?



我在 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)创建

最新更新