我正在编写的程序中有一个错误,这是我第一次调用的地方:
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秒钟,然后显示一秒钟,然后立即退出该框。
有人知道如何解决此问题吗?
答案 0 :(得分:3)
仅当窗口管理器告诉窗口实际绘制某些内容时,才会绘制窗口的内容。因此,您的代码是否有效取决于您的窗口管理器。
要使其生效,您应该做的是让pygame处理所有事件,通常可以通过调用pygame.event.get()
来实现。
此外,您应该避免调用pygame.time.wait()
之类的阻塞函数,因为在阻塞函数时,您无法处理事件或让pygame处理系统事件。这意味着pygame不会重绘窗口,并且您无法关闭窗口。
考虑将您的代码更改为此:
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)))
run = True
clock = pygame.time.Clock()
dt = 0
while run:
dt += clock.tick()
for e in pygame.event.get():
if e.type == pygame.QUIT:
run = False
if dt >= 5000:
run = False
pygame.display.update()