Joe*_*son 5 python pygame python-3.x
我正在写的程序中有一个错误,我第一次调用该错误:
pygame.display.update()
Run Code Online (Sandbox Code Playgroud)
然后我打电话给:
pygame.time.wait(5000)
Run Code Online (Sandbox Code Playgroud)
我希望程序更新显示,然后等待一段时间后再继续。但是由于某种原因,显示仅在等待时间之后更新,而不是在等待时间之后更新。
我已附加了一些示例代码来演示正在发生的事情:
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
Run Code Online (Sandbox Code Playgroud)
这将创建一个带有黑框的白色窗口,然后等待5秒钟然后退出。
但是,它实际上所做的是创建一个窗口,等待5秒钟,然后显示一会儿,然后立即退出。
有谁知道如何解决这个问题?
仅当您的窗口管理器告诉您的窗口实际绘制某些内容时,您的窗口内容才会被绘制。因此,您的代码是否有效取决于您的窗口管理器。
要使其正常工作,您应该做的是让 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()
Run Code Online (Sandbox Code Playgroud)