【发布时间】:2018-11-28 18:11:01
【问题描述】:
我正在使用 Pygame 在 Python 中制作游戏,这是导致问题的代码部分。
#Game Mainloop
isRunning = True
while isRunning:
for event in pygame.event.get():
if event.type == pygame.QUIT:
isRunning = False
elif event.type == pygame.KEYDOWN:
key = str(event.key)
print(key + " is down")
if event.key == pygame.K_w:
Globals.camera_move = 1
elif event.key == pygame.K_s:
Globals.camera_move = 2
elif event.key == pygame.K_a:
Globals.camera_move = 3
elif event.key == pygame.K_d:
Globals.camera_move = 4
elif event.type == pygame.KEYUP:
key = str(event.key)
print(key + " is up")
Globals.camera_move = 0
我的问题是在释放键之前触发了pygame.KEYUP事件。
例如,如果我按下 W 键,则KEYDOWN 事件触发并且“119 is down”会打印到终端一次。
但是如果我继续按住 W 键,KEYUP 事件会被触发,并且“119 is up”会重复打印到终端。
当 W 键被释放时,它会停止打印到终端。
我查找了与我类似的问题,我能找到的最接近的是this。我的问题不同的原因是因为他们的问题是通过直接连接他们的机器而不是远程 vnc 来解决的。
我没有使用远程键盘,因为我直接连接到一台 linux 机器。我还在单独的 Windows 机器上运行了代码,也遇到了同样的问题。
【问题讨论】:
-
请edit您问题中的代码并提供足够的代码,以便其他人可以运行它并重现(并可能修复)问题。
-
大多数键盘或计算机接口都有某种自动重复功能,当一个键被按住超过一定长度时,它可能会模拟
KEYDOWN(和相应的KEYUP事件)时间。请参阅pygame.key.set_repeat()的文档
标签: python python-3.x pygame keyevent