【问题标题】:pygame.key.get_pressed() appears to be frozenpygame.key.get_pressed() 似乎被冻结
【发布时间】:2020-12-03 19:30:29
【问题描述】:

我正在尝试为我的游戏制作一个菜单系统,您可以从主菜单开始,然后您可以按空格键进入教程,然后再次按空格键进入游戏。问题是我需要确保玩家在让他们退出教程之前释放空间,但是 pygame.key.get_pressed() 报告即使退出菜单时按下的相同键仍然被按下不是。这是我的代码。

def menu(normal=True):
    global keys
    while True:
        pygame.time.wait(33)
        keys = pygame.key.get_pressed()
        if keys[pygame.K_SPACE]:
            return True
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                return False

#Main menu
displayMenuText(0)
menu()

#Tutorial
displayMenuText(1)
while pygame.key.get_pressed()[pygame.K_SPACE]:
    pygame.time.wait(33)
menu()

返回布尔值的 menu() 函数在代码的其他地方使用。

【问题讨论】:

    标签: python input pygame


    【解决方案1】:

    您可以使用pygame.KEYUP 事件来检查按键。

    events = pygame.event.get()
    for event in events:
        if event.type == pygame.KEYUP:
           if event.key == pygame.K_SPACE:
               return True
    

    【讨论】:

    • 为了在答案中完整,它可能应该添加 pygame.key.get_pressed()[pygame.K_SPACE] 即使在用户释放密钥之后返回 True 的原因是因为在您调用其中一个事件函数之前它不会更新pygame.event.getpygame.event.pollpygame.event.pumppygame.event.clear
    • 继续@TedKleinBergman 的评论:从docspygame.event.pump():“对于游戏的每一帧,您都需要对事件队列进行某种调用。这可以确保您的程序可以在内部与操作系统的其余部分进行交互。如果您在游戏中不使用其他事件函数,则应调用 pygame.event.pump() 以允许 pygame 处理内部操作”。如果您不这样做或有事件循环,pygame 将挂起。所以你可以用pygame.event.pump()替换这个答案中的事件循环。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-29
    • 1970-01-01
    • 2016-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多