我在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)
OS:Mac
Python版本3.8.3
Pygame版本1.9.6
编辑器:Jupyter Notebook
答案 0 :(得分:2)
问题出在MacOS(可能还有其他OS)上,只有在检查了pygame事件后,屏幕才会更新。
通常,这是通过调用pygame.event.get()
或pygame.event.poll()
完成的。
但是,如果您的程序不关心检查事件,那么对pygame.event.pump()
的调用也将起作用。
pygame.event.pump()
,link here的文档中简要提到了此问题。
在内部必须处理一些重要的事情 事件队列。主窗口可能需要重新粉刷或响应 系统。如果您也无法致电事件队列 很长一段时间,系统可能会决定您的程序已锁定。
因此解决方案是在pygame.event.pump()
之后调用pygame.display.update()
(或另一个事件函数)。
然后正确的代码将是:
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.event.pump() # Make sure events are handled
pygame.time.delay(3000)
pygame.quit()
sys.exit(0)