2013-12-23 129 views
1

我正在尋找一種方法,程序停止並等待用戶按下特定鍵。我可以用while循環實現這個嗎?我需要最好的算法,如果存在等待的內建函數,以避免循環。 我在official website of pygame上發現了幾個信息,但沒有任何幫助。Pygame等待用戶按下一個鍵

這裏是一個測試算法,但將不工作:

key = "f" 
while key != "K_f": 
    key = pygame.key.get_pressed() 
    if key[Keys.K_f]: 
     do something... 

回答

1

你可以用while循環和事件隊列做到這一點:

from pygame.locals import * 
def wait(): 
    while True: 
     for event in pygame.event.get(): 
      if event.type == QUIT: 
       pygame.quit() 
       sys.exit() 
      if event.type == KEYDOWN and event.key == K_f: 
       return 
+0

乾杯。看起來不錯,但是如果使用'K_f'的話,我會得到錯誤。我把它改爲:'if event.type == pygame.KEYDOWN and event.key == K_f:' 但是我得到以下錯誤:'NameError:name'K_f'未定義'所以我嘗試將其更改爲'... = pygame.K_f'但是現在,就像當我按下f鍵時if語句不成立。 –

+0

我剛剛檢查過,它適用於我,至於NameErrors,我忘了在頂部包含'from pygame import *',您可以將它放在'pygame.'前綴中。嘗試在KEYDOWN事件上打印event.key,以查看當前正在按下的內容。也許這是一個鍵盤問題。 –

1

如果你正在等待一個關鍵被按下,你可以使用event.wait()函數。這很有用,因爲它不需要很多處理。

import pygame 
from pygame.locals import * 

pygame.event.clear() 
while True: 
    event = pygame.event.wait() 
    if event.type == QUIT: 
     pygame.quit() 
     sys.exit() 
    elif event.type == KEYDOWN: 
     if event.key = K_f: 
      do something... 

請注意,event.wait()等待事件出現在事件高速緩存中,事件高速緩存應該先清除。

pygame.event documentation

+0

這很好,除非需要非常準確的事件時間戳。 –