如何确保仅在上一个命令完全执行后才调用 time.sleep()?

问题描述

我正在使用 pygame,我想在窗口关闭之前显示“游戏结束”消息。为此,我想像这样使用 time.sleep() 函数

message('Game Over',red)
pygame.display.update()

time.sleep(3)

然而,似乎 time.sleep() 延迟了 pygame.display.update() 的执行,基本上,消息出现在延迟之后而不是之前。如何确保仅在前一个函数完全执行后才调用 time.sleep()?提前致谢。

解决方法

通常,您希望避免在 pygame 或循环内部使用 time.sleep()。一种解决方法是使用 datetime 模块。

下面的代码将运行 doSomething(),一旦变量 GameOver 为真,等待 3 秒,3 秒后再次开始运行 doSomething(),同时更新屏幕以便您可以绘制并在 3 秒过去时运行 doOtherStuff()

d = datetime.now()
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
    
    if not GameOver:
        d = datetime.now()
        # your main code will go here
        doSomething()
    
    # wait 3 seconds when GameOver is True
    if GameOver and (datetime.now() - d).total_seconds() >= 3:
        GameOver = False
        # you can put anything else you want to run at the end of the 3 seconds here
    
    # do other stuff even while waiting
    doOtherStuff()
    pygame.display.update()