pygame:直到延迟后,显示才会更新

时间:2019-02-14 09:49:27

标签: python python-3.x pygame

我正在编写的程序中有一个错误,这是我第一次调用的地方:

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秒钟,然后显示一秒钟,然后立即退出该框。

有人知道如何解决此问题吗?

1 个答案:

答案 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()