繁体   English   中英

如何在 pygame 中使用 time.sleep?

[英]How to use time.sleep in pygame?

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

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

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

2019 年 3 月 18 日更新

在 Pygame 中,您必须使用pygame.time.wait()而不是 python 的pygame.time.wait() 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()所以我不能说它是否适合你,但你可以试试。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM