Pygame,在相同的时间内绘制相同的帧

时间:2016-02-08 12:02:03

标签: python time pygame message

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

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

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

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

这确实有效,但它往往会“挂起”整个过程,所以当发生这种情况时,由于这个原因我会得到一些错误,主要是一些帧丢失,因为程序可以跟上睡眠清醒周期。

所以我现在想的是绘制相同的帧两秒钟。

那么你们建议我做什么?

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

1 个答案:

答案 0 :(得分:0)

你的程序“挂起”因为你在睡觉时没有调用pygame.event.get()pygame.event.get()让pygame处理它的内部事件。

最简单的解决方法是使用dt = clock.tick()的返回值,在这种情况下,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()

此功能将等待指定的时间并保持屏幕与呼叫前一样。