我正在用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 down”。
但是如果我继续按住 W 键,则会触发KEYUP
事件,并在终端上反复打印“ 119 up”。
松开 W 键时,它将停止打印到终端。
我查找了与我类似的问题,我能找到的最接近的问题是this。我的问题与众不同的原因是,他们的问题是通过直接与他们的计算机而不是远程vnc连接而解决的。
我没有使用远程键盘,因为我直接连接到Linux机器。我还在单独的Windows计算机上运行了代码,并遇到了同样的问题。
答案 0 :(得分:0)
使用 pygame.key.set_repeat()
控制按住键的重复方式:
当启用键盘重复时,按下的键会产生多个 pygame.KEYDOWN
事件。 [...]
[...] 禁用键重复调用此函数,不带参数或延迟设置为 0。
只需调用 pygame.key.set_repeat()
即可禁用重复键:
pygame.key.set_repeat()
isRunning = True
while isRunning:
for event in pygame.event.get():
# [...]