如何延迟pygame.key.get_pressed()?

时间:2014-02-07 14:01:58

标签: python pygame

我一直无法找到直截了当的答案。

key.set_repeat()适用于KEYDOWN个事件,但不适用于key.get_pressed()

import sys, pygame
from pygame.locals import *

pygame.init()
Clock = pygame.time.Clock()
pygame.display.set_mode((200, 100))

pygame.key.set_repeat(1, 500)

while True:

    if pygame.key.get_pressed()[K_UP]:
        print('up!')

    for event in pygame.event.get():

        if event.type == QUIT:
            pygame.quit()
            sys.exit()

        elif event.type == KEYDOWN:
            if event.key == K_DOWN:
                print('down!')

    Clock.tick(30)

即使是最轻微的点击UP也会爆炸至少几个,只有下来!s被推迟了。我想使用key.get_pressed(),因为它可以方便地处理多个输入。我是否需要使用某种类型的计数器来解决它?或者,有没有办法处理多个KEYDOWN事件?

1 个答案:

答案 0 :(得分:1)

如果你不需要,请不要乱用key.set_repeat()

只需使用key.get_pressed()来检查按下的按键以及按下按键的位置对您有意义,例如在按下K_LEFT时向左移动

当您在单键按下时,使用event.get() / KEYDOWN,例如像K_P之类的东西会暂停游戏

如果你弄乱key.set_repeat(),例如将延迟设置为低,您将无法识别单个击键,因为每个击键将创建多个KEYDOWN事件。

要处理多个KEYDOWN事件,只需检查相关事件即可。每个击键都会产生KEYDOWN事件,因此您可以简单地检查,例如:

for event in pygame.event.get():
    if event.type == KEYDOWN:
        if event.key == K_DOWN:
            print('down!')
        elif event.key == K_UP:
            print('up!')

如果用户一直按下按键,那么当然会多次打印up! / down!

黄金法则是:如果您对单个密钥的KEYDOWNKEYUP事件进行了强调,请更好地使用key.get_pressed()


  

即使是最轻微的点击UP也会爆炸至少几个!s,只有下来!s被推迟

那是因为事件系统与key.get_pressed()完全不同。如果您在多个帧上按K_UP,则会打印每个帧'up!',因为在每个帧中按下了键。 key.get_pressed()简单返回在您调用此函数时按下哪些键。换句话说:你不能“延迟”它。