我在编写的程序中第一次调用时出现一个错误:
pygame.display.update()
然后我打电话:
pygame.time.wait(5000)
我希望程序更新显示,然后等待一段时间再继续。但是出于某种原因,显示仅在等待时间之后更新,而不是在此之前。
我附加了一些示例代码来演示正在发生的事情:
import pygame pygame.init() white = (255,255,255) black = (0,0,0) green = (0,255,0) screenSize = screenWidth, screenHeight = 200, 200 screen = pygame.display.set_mode(screenSize) screen.fill(white) pygame.draw.rect(screen, black,((50,50),(50,50))) pygame.display.update() pygame.time.wait(5000) pygame.quit() raise SystemExit
这应该创建一个带有黑色框的白色窗口,然后等待 5 秒钟然后退出。
然而它实际上做的是创建一个窗口,等待 5 秒钟,然后一瞬间框就会出现,然后它立即退出。
有谁知道如何解决这个问题?
您遇到的问题源于pygame.display.update()与pygame.time.wait()事件循环和显示缓冲区交互的方式。
pygame.time.wait()
screen.fill(white)
pygame.draw.rect(screen, black,((50,50),(50,50)))
pygame.quit()
你需要确保在程序等待之前屏幕已经更新并显示。正确的做法是让事件循环处理更新,然后让程序等待指定的时间。
pygame.time.delay()
不要使用pygame.time.wait(),而要使用pygame.time.delay(),它不会阻塞整个事件循环并允许呈现更新。
import pygame pygame.init() white = (255, 255, 255) black = (0, 0, 0) screenSize = screenWidth, screenHeight = 200, 200 screen = pygame.display.set_mode(screenSize) screen.fill(white) pygame.draw.rect(screen, black, (50, 50, 50, 50)) pygame.display.update() # Immediately update the display pygame.time.delay(5000) # Delay without blocking events pygame.quit() raise SystemExit
pygame.event.pump()
如果您正在使用pygame.time.wait()并且需要确保在等待之前显示更新,您可以手动抽取事件:
import pygame pygame.init() white = (255, 255, 255) black = (0, 0, 0) screenSize = screenWidth, screenHeight = 200, 200 screen = pygame.display.set_mode(screenSize) screen.fill(white) pygame.draw.rect(screen, black, (50, 50, 50, 50)) pygame.display.update() # This will update the display immediately # Manually pump events to allow the display to refresh before waiting pygame.event.pump() pygame.time.wait(5000) # Wait for 5 seconds pygame.quit() raise SystemExit
pygame.time.delay(5000)