Pygame,在设定的时间内绘制同一帧

Pygame, Draw the same frame for a set amount of time

我想显示一条消息两秒钟。

我现在使用的逻辑是让代码在 pygame.display.flip 之后使用 pygame.time.delay(2000) 等待。

一个简短的例子:(我在我的代码上经常使用这个翻转延迟)

    write_gui("{0} has appeared".format(monster.name), BLUE, 24, TEXT_CORNER_X, TEXT_CORNER_Y)
    pygame.display.flip()
    pygame.time.delay(2000)

这确实有效,但它倾向于 "hang" 整个过程,因此当发生这种情况时,我会因此遇到一些错误,主要是一些帧丢失,因为程序可以跟上睡眠-觉醒周期。

所以我现在想的是画同一个框两秒。

那么你们建议我应该做什么?

因为我的一个答案是将每次翻转放在一个 while 循环中,所以必须有更好的行保守方法来解决这个问题。

你的程序 "hangs" 因为你在睡觉时不调用 pygame.event.get()pygame.event.get()让 pygame 处理它的内部事件。

最简单的解决方法是使用 dt = clock.tick() 中的 return 值,在这种情况下 dt 将是自上次调用 clock.tick() 以来的时间,该值以毫秒为单位。 然后,您可以使用该值来增加显示消息的时长的计数器。

如果你愿意,你可以写一个这样的函数,然后调用它等待多长时间:

def waitFor(waitTime): # waitTime in milliseconds
    screenCopy = screen.copy()
    waitCount = 0
    while waitCount < waitTime:
        dt = clock.tick(60) # 60 is your FPS here
        waitCount += dt
        pygame.event.pump() # Tells pygame to handle it's event, instead of pygame.event.get()
        screen.blit(screenCopy, (0,0))
        pygame.display.flip()

此函数将等待指定的时间并保持调用前的屏幕。