为什么在未释放键时会触发pygame.KEYUP事件?

时间:2018-11-28 18:11:01

标签: python python-3.x pygame keyevent

我正在用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计算机上运行了代码,并遇到了同样的问题。

1 个答案:

答案 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():
        # [...]