您可能会对get_pressed()的实际操作感到困惑。从文档:
返回一个布尔值序列,表示键盘上每个键的状态。使用键常量值来索引数组。True 值表示该按钮被按下。
使用此函数获取按钮列表不是处理用户文本输入的正确方法。您无法知道按键的顺序,并且在两次调用 pygame.key.get_pressed() 之间可能完全不会注意到快速按键。也没有办法将这些推送的键翻译成完全翻译的字符值。有关此功能,请参阅事件队列上的 pygame.KEYDOWN 事件。
换句话说,当您调用 get_pressed() 时,您将获得在调用 get_pressed() 时键盘状态的表示。
例如,假设您在游戏开始前一秒调用 get_pressed()。您将返回一个结构,其中列出了键盘上的所有键以及它们是否被按下(它们都是错误的)。
在游戏开始两秒后,您按下一个键。如果您查看之前查看的相同结构,它仍然会说所有内容都未按下,因为您仍在查看一秒钟前的键盘状态。然而,如果你再次调用 get_pressed(),你会得到一个新的、更新的结构,这个新结构应该显示按键被按下。
解决此问题的一种方法是执行以下操作:
while True:
# Update Stuff
# Draw Stuff
state = pygame.key.get_pressed()
# Now check the keys
现在,您可以在键盘上获取最新信息。
应该注意的一件事是,使用上述功能,您仍然可能会错过键盘按键。如果更新功能需要很长时间,一个键可能被按下然后在足够短的时间内被释放,当键被按下时你不会调用 get_pressed() 。
如果这可能是一个问题,您可能希望使用事件循环。就像是...
is_moving = False
while True:
for event in pygame.event.get():
if event.type == pygame.KEYDOWN and event.key == pygame.K_d:
is_moving = True
elif event.type == pygame.KEYUP and event.key == pygame.K_d:
is_moving = False