2013-12-23 127 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

这很好,除非需要非常准确的事件时间戳。 –