【问题标题】:How do I check for two keyboard keys being pressed at the same time with pygame?如何使用pygame检查同时按下的两个键盘键?
【发布时间】:2021-10-03 08:47:52
【问题描述】:

我正在尝试在我的 pygame 游戏中添加一些功能,这些功能会在同时按下两个键(例如 a + ESC)时执行。我尝试使用

for event in pygame.event.get():
  if event.type == pygame.KEYDOWN and event.key == pygame.K_a and event.key == pygame.K_ESCAPE:
    # do something

但是当我同时按下两个键时它无法识别

【问题讨论】:

  • 如果用户按住按键,我只想执行 # 做一次而不是多次

标签: python events pygame key


【解决方案1】:

使用pygame.key.get_pressed() 获取所有键盘按钮的状态。

keys = pygame.key.get_pressed()
if keys[pygame.K_a] and keys[pygame.K_ESCAPE]:
    # [...]

在其中一个键(aESC)上发生KEYDOWN 事件时检查键的状态:

for event in pygame.event.get():
    # [...]

    if event.type == pygame.KEYDOWN:
        if event.key == pygame.K_a or event.key == pygame.K_ESCAPE: # <--- or 

            keys = pygame.key.get_pressed()
            if keys[pygame.K_a] and keys[pygame.K_ESCAPE]:
                print("a and ESC")

相同的组合在一个条件中:

event_list = pygame.event.get()
keys = pygame.key.get_pressed()
for event in event_list:
    # [...]        

    if event.type == pygame.KEYDOWN and \
        ((event.key == pygame.K_a and keys[pygame.K_ESCAPE]) or \
        (event.key == pygame.K_ESCAPE and keys[pygame.K_a])):
        
        print("a and ESC")

注意:pygame.event.get() 必须在 pygame.key.get_pressed() 之前调用,因为 pygame.event.get() 返回的键的状态是在评估事件时设置的。

【讨论】:

  • 哦,好的,谢谢!当用户按住按键时它只执行一次还是执行几次?
  • @299792458 按键按下时在事件循环中执行
猜你喜欢
  • 2019-05-21
  • 2017-02-16
  • 1970-01-01
  • 1970-01-01
  • 2015-04-22
  • 1970-01-01
  • 1970-01-01
  • 2012-01-22
  • 1970-01-01
相关资源
最近更新 更多