【问题标题】:Pygame waiting the user to keypress a keyPygame 等待用户按键
【发布时间】:2013-12-23 17:31:04
【问题描述】:

我正在搜索一种方法,在该方法中程序停止并等待用户按下特定键。我可以用一个while循环来实现这个吗?如果存在等待的内置函数,我需要最好的算法来避免循环。 我在official website of pygame上找到了一些信息,但没有任何帮助。

这是一个测试算法,但不起作用:

key = "f"
while key != "K_f":
     key = pygame.key.get_pressed()
     if key[Keys.K_f]:
         do something...

【问题讨论】:

    标签: python-3.x pygame keypress


    【解决方案1】:

    如果您正在等待按键被按下,您可以使用 event.wait() 函数。这很有用,因为它不需要大量处理。

    import pygame
    from pygame.locals import *
    
    pygame.event.clear()
    while True:
        event = pygame.event.wait()
        if event.type == QUIT:
            pygame.quit()
            sys.exit()
        elif event.type == KEYDOWN:
            if event.key = K_f:
                do something...
    

    注意 event.wait() 等待事件出现在事件缓存中,应该先清除事件缓存。

    pygame.event documentation

    【讨论】:

    • 这很好,除非可能需要非常准确的事件时间戳。
    【解决方案2】:

    你可以用一个while循环和一个事件队列来做到这一点:

    from pygame.locals import *
    def wait():
        while True:
            for event in pygame.event.get():
                if event.type == QUIT:
                    pygame.quit()
                    sys.exit()
                if event.type == KEYDOWN and event.key == K_f:
                    return
    

    【讨论】:

    • 干杯。看起来不错,但是 K_f 的 if 语句出现错误。我将其更改为:if event.type == pygame.KEYDOWN and event.key == K_f: 但我收到以下错误:NameError: name 'K_f' is not defined 所以我尝试将其更改为... = pygame.K_f 但现在,当我按下 f 键时,就像 if 语句不成立。
    • 我刚刚检查过,它对我有用,至于 NameErrors,我忘了在顶部包含 from pygame import *,你可以留下 pygame. 前缀。尝试在 KEYDOWN 事件上打印 event.key 以查看您当前正在按下的内容。可能是键盘问题。
    • AFAIK,每种事件类型的属性都不同。因此,事件并不总是具有key 属性。例如,调用 event.key 将是 MOUSEMOTION 事件的错误。
    猜你喜欢
    • 1970-01-01
    • 2020-01-21
    • 2018-10-30
    • 1970-01-01
    • 1970-01-01
    • 2012-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多