簡體   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