【问题标题】:How to use time.sleep in pygame?如何在pygame中使用time.sleep?
【发布时间】:2016-02-29 04:48:10
【问题描述】:

所以我试图显示一个图像,等待 1 秒,然后显示另一个图像。我正在制作一个匹配游戏,所以在我的代码中我想说如果两个图像不匹配,我想将图像更改为预设的通用图像。所以我的代码看起来像这样:

if True:
    self.content = self.image
    time.sleep(1)
    self.content = Tile.cover

self.content 是显示内容的变量,self.image 是显示的图像,然后Tile.cover 是覆盖另一个图像的通用图像。然而,每当我这样做时,代码都会跳过第一行,只是将图像设置为Tile.cover,为什么?

【问题讨论】:

  • 也许你必须在time.sleep(1)之前重绘?
  • 自我的类型是什么?你能给我们更多的细节/代码吗?正如之前的评论中所说,它可能与您必须更新显示的事实有关。你可能在某处有类似“pygame.display.update()”的东西。您可以使用调试器精确定位打印 Tile.cover 的时间(哪一行)
  • sleep() 停止程序中的所有功能,因此没有人使用它。解决方案需要更多修改。

标签: python time pygame


【解决方案1】:

于 2019 年 3 月 18 日更新

在 Pygame 中,您必须使用 pygame.time.wait() 而不是 python 的 time.sleep()

耗时毫秒

pygame.time.wait(1000)

不使用time.sleep的原因是因为它会阻塞pygame的事件循环,所以pygame将无法处理其他事件。




旧答案

以下是此答案的旧版本,标记为已接受。它过时,而且很可能不正确

你得到的行为是由于time.sleep()的方式

示例:

我希望您在控制台中尝试以下代码:

>>> import time
>>> 
>>> def foo():
        print "before sleep"
        time.sleep(1)
        print "after sleep"
>>> 
>>> # Now call foo()
>>> foo()

你观察到输出过程中发生了什么吗?

>>> # Output on calling foo()
... # Pause for 1 second
... 'before sleep'
... 'after sleep'

这也是您的代码所发生的情况。首先它休眠,然后同时将self.content 更新为self.imageTime.cover

修复:

要修复上面示例中的代码,您可以使用sys.stdout.flush()

>>> def foo():
        print "before sleep"
        sys.stdout.flush()
        time.sleep(1)
        sys.stdout.flush()
        print "after sleep"

>>> foo()
... 'before sleep'
... # pause for 1 second
... 'after sleep'

免责声明:

我没有用 Pygame 尝试过sys.stdout.flush(),所以我不能说它是否适合你,但你可以试试。

对于这个 SO 问题似乎有一个可行的解决方案:How to wait some time in pygame?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-17
    • 1970-01-01
    • 2019-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-22
    • 1970-01-01
    相关资源
    最近更新 更多