[英]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.image
和Time.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.