猿问

pygame.display.update() 不能很好地工作

我正在 Mac 上编写 pygame 程序。然后,有一个问题。我编写了如下代码,但是 pygame.display.update() 不起作用。它应该更新并等待 3 秒,但它先等待 3 秒,然后在 pygame.quit() 之后更新。谁能告诉我如何解决这个问题?


这不起作用:


import pygame

import sys


pygame.init()


win = pygame.display.set_mode((500, 500))

pygame.display.set_caption("hello")

font = pygame.font.SysFont("comicsans", 100)

text = font.render("hello", 1, (255, 255, 255))

win.blit(text, (200, 200))

pygame.display.update()

pygame.time.delay(3000)


pygame.quit()

sys.exit(0)

这可以正常工作:


import pygame

import sys


pygame.init()


win = pygame.display.set_mode((500, 500))

pygame.display.set_caption("hello")

font = pygame.font.SysFont("comicsans", 100)

text = font.render("hello", 1, (255, 255, 255))

win.blit(text, (200, 200))

pygame.display.update()


pygame.quit()

pygame.time.delay(3000)

sys.exit(0)

操作系统:Mac

Python 版本 3.8.3

Pygame 版本 1.9.6

编辑器:Jupyter Notebook


翻阅古今
浏览 105回答 1
1回答

qq_花开花谢_0

问题出在 MacOS(以及可能的其他操作系统)上,屏幕仅在检查 pygame 事件后更新。通常,这是通过调用pygame.event.get()或 来完成的pygame.event.poll()。但是,如果您的程序不关心检查事件,那么调用pygame.event.pump()也可以。pygame.event.pump()链接的文档中简要提到了这个问题。事件队列中有一些重要的事情必须在内部处理。主窗口可能需要重新绘制或响应系统。如果您长时间未能调用事件队列,系统可能会认为您的程序已锁定。所以解决方案是在 后调用pygame.event.pump()(或另一个事件函数)pygame.display.update()。更正后的代码将是:import pygameimport syspygame.init()win = pygame.display.set_mode((500, 500))pygame.display.set_caption("hello")font = pygame.font.SysFont("comicsans", 100)text = font.render("hello", 1, (255, 255, 255))win.blit(text, (200, 200))pygame.display.update()pygame.event.pump() # Make sure events are handledpygame.time.delay(3000)pygame.quit()sys.exit(0)
随时随地看视频慕课网APP

相关分类

Python
我要回答