使用key.get_pressed()检测单次按键

2024-05-23 14:23:31 发布

您现在位置:Python中文网/ 问答频道 /正文

无论按键按下多长时间,我都会尝试检测一次按键。例如,如果按住“a”键3秒钟,我当前的程序将打印以下内容:

按键

'aaaaaaaaaaaaa'

密钥释放

我正试图让它在每个新闻/发布周期中只允许一个动作:

按键

'a'

密钥释放

按键

'a'

密钥释放

我做错了什么?多谢各位

def update(self):
    space_released = True
    space_pressed = False

        elif event.type == KEYUP:
            if event.key == K_SPACE:
                self.space_released = True

        elif event.type == KEYDOWN:
            if event.key == K_SPACE:
                self.space_released = False

    key = pygame.key.get_pressed()

    while space_released == True:
        # Print key pressed
                return
        space_released = False

Tags: keyselfeventfalsetrueiftype密钥
1条回答
网友
1楼 · 发布于 2024-05-23 14:23:31

使用^{}控制如何重复保留的键:

When the keyboard repeat is enabled, keys that are held down will generate multiple pygame.KEYDOWN events. [...]

[...] To disable key repeat call this function with no arguments or with delay set to 0.

只需调用pygame.key.set_repeat()即可禁用重复键:

pygame.key.set_repeat()

run = True
while run:
    clock.tick(60)
    
    space_released = False
    space_pressed = False
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False

        elif event.type == KEYUP:
            if event.key == K_SPACE:
                space_released = True

        elif event.type == KEYDOWN:
            if event.key == K_SPACE:
                space_pressed = True

    # [...]

如果要对pygame.key.get_pressed ()执行类似操作,则必须保存pygame.K_SPACE的状态,并将以前的(space_was_pressed)状态与当前状态(space_is_pressed)进行比较:

space_was_pressed = 0

run = True
while run:
    clock.tick(60)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False

    key = pygame.key.get_pressed()

    space_released = True
    space_pressed = False
    space_is_pressed = key[pygame.K_SPACE]
    if space_was_pressed != space_is_pressed:
        space_released = not space_is_pressed
        space_pressed = space_is_pressed
    space_was_pressed = space_is_pressed

相关问题 更多 >