【问题标题】:How to retrieve the instantaneous (last) state of the keyboard with pygame?如何使用 pygame 检索键盘的瞬时(最后)状态?
【发布时间】:2020-07-17 02:05:12
【问题描述】:

我在 github 上发布了同样的问题,因为我不确定这是 pygame 问题还是我做错了什么:https://github.com/pygame/pygame/issues/1619

我正在尝试在一个项目中使用 pygame,我必须在该项目中获取键盘的当前瞬时状态。根据https://devdocs.io/pygame/ref/key#pygame.key.get_pressed , get_pressed() 函数应该这样做,但显然它没有:它似乎返回了它没有处理的第一个事件框架,而不是最后一个。

显示这是这段代码 sn-p:

import pygame
import time

pygame.init()
gameDisplay = pygame.display.set_mode((100, 100))

i = 0
while True:
    events = pygame.event.get()
    keys = pygame.key.get_pressed()
    print(f"iter:{i}")
    # print(f"events:{events}")
    print(f"keys[pygame.K_a]:{keys[pygame.K_a]}")
    time.sleep(5.0)
    i = i + 1

如果在迭代 5 的 sleep() 期间,我按下并释放两次“a”键(顺便说一下,这在我的法语键盘上似乎是“q”),会发生以下情况:

iter:5
keys[pygame.K_a]:0
iter:6
keys[pygame.K_a]:0
iter:7
keys[pygame.K_a]:1
iter:8
keys[pygame.K_a]:0
iter:9
keys[pygame.K_a]:1
iter:10
keys[pygame.K_a]:0
iter:11
keys[pygame.K_a]:0

如果我在 sleep() 结束时仍然按“a”,我希望这里只看到零,或者在第 6 次迭代中只看到一个“1”。

我做错了吗?如果是这样,你能帮我取回键盘的当前状态吗?谢谢!

【问题讨论】:

  • 删除time.sleep()
  • 无法从输出中判断您当时是否按下了某个键。我无法在本地复制
  • @Kingsley : time.sleep() 在这里复制设置,您可以在两次调用 pygame.key.get_pressed() 之间多次按下和释放一个键。
  • @IainShelvington:你不能复制吗?在这个例子中,当 time.sleep() 在迭代 6 之前执行时,我按下并释放了两次“a”键。我在我的机器上一直得到这种行为。
  • @YannBouteiller 我为 keydown/up 事件添加了一些日志记录,这是我的日志justpaste.it/2vbzy

标签: python pygame keyboard key


【解决方案1】:

这是 1.9.6 中的一个错误

2.0.0 版修正了它。

【讨论】:

    猜你喜欢
    • 2016-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-17
    • 2021-12-15
    • 1970-01-01
    相关资源
    最近更新 更多