如何防止用户在Python/Pygame中单击

如何防止用户在Python/Pygame中单击,python,python-3.x,pygame,Python,Python 3.x,Pygame,因此,我制作了一个游戏,可以产生问题,用户必须猜出正确的答案。每次用户得到一个正确的问题时,都会出现一个“正确的!”,但每次用户得到一个错误的问题时,都会出现一个“错误的!”。该文本在0.5秒后消失 当用户得到正确或错误的问题时,游戏会因时间而等待0.5秒。睡眠(0.5)。用户可以不断发送鼠标点击垃圾信息,并将程序延迟几秒钟,因为他们可能会不断出错 这是我需要帮助的代码部分: while answer != correct_answer: for event in pygame.

因此,我制作了一个游戏,可以产生问题,用户必须猜出正确的答案。每次用户得到一个正确的问题时,都会出现一个“正确的!”,但每次用户得到一个错误的问题时,都会出现一个“错误的!”。该文本在0.5秒后消失

当用户得到正确或错误的问题时,游戏会因
时间而等待0.5秒。睡眠(0.5)
。用户可以不断发送鼠标点击垃圾信息,并将程序延迟几秒钟,因为他们可能会不断出错

这是我需要帮助的代码部分:

while answer != correct_answer:
        for event in pygame.event.get():         
            if event.type == pygame.MOUSEBUTTONDOWN:
                for index, rect in enumerate(answers_rect):
                    if rect.collidepoint(event.pos):
                        answer = index
                        if answer == correct_answer:
                            display_text("correct!",green,(start_x-150),(start_y-650),medText)
                            pygame.display.update()
                            time.sleep(0.5)
                            display_text("correct!",white,(start_x-150),(start_y-650),medText)
                            pygame.display.update()
                        elif answer != correct_answer:
                            display_text("wrong!",red,(start_x-140),(start_y-650),medText)
                            pygame.display.update()
                            time.sleep(0.5)
                            display_text("wrong!",white,(start_x-140),(start_y-650),medText)
                            pygame.display.update()

我怎样才能停止这个垃圾邮件,并且在0.5秒内不允许用户点击任何答案

您可以将
等待睡眠\u添加到\u over
全局布尔变量。 使用此变量,可以禁用clicks事件,如下所示:

waiting_for_sleep_to_over = False
while answer != correct_answer:
    for event in pygame.event.get():         
        if event.type == pygame.MOUSEBUTTONDOWN and waiting_for_sleep_to_over is not True:
            for index, rect in enumerate(answers_rect):
                if rect.collidepoint(event.pos):
                    answer = index
                    if answer == correct_answer:
                        display_text("correct!",green,(start_x-150),(start_y-650),medText)
                        pygame.display.update()
                        waiting_for_sleep_to_over = True
                        time.sleep(0.5)
                        waiting_for_sleep_to_over = False
                        display_text("correct!",white,(start_x-150),(start_y-650),medText)
                        pygame.display.update()
                    elif answer != correct_answer:
                        display_text("wrong!",red,(start_x-140),(start_y-650),medText)
                        pygame.display.update()
                        waiting_for_sleep_to_over = True
                        time.sleep(0.5)
                        waiting_for_sleep_to_over = False
                        display_text("wrong!",white,(start_x-140),(start_y-650),medText)
                        pygame.display.update()
编辑: 在注释建议之后,使用以下函数,而不是布尔标志:


为什么不在单击按钮后禁用它,并在睡眠后重新启用它?@helpmecode如果您解决了问题,请将其中一个答案标记为已接受并向上投票。谢谢,祝你好运!这不起作用,当您单击按钮时,事件仍然会添加到事件队列。@skrx您是否尝试过:因此,尝试使用pygame.event.set_blocked()和pygame.event.set_allowed()代替布尔值变量,似乎可以与
pygame.event.set_blocked
set_allowed
一起使用。最好自己测试代码。@skrx,在答案中添加了您的建议。谢谢,太棒了,谢谢你!
while answer != correct_answer:
    for event in pygame.event.get():         
        if event.type == pygame.MOUSEBUTTONDOWN:
            for index, rect in enumerate(answers_rect):
                if rect.collidepoint(event.pos):
                    answer = index
                    if answer == correct_answer:
                        display_text("correct!",green,(start_x-150),(start_y-650),medText)
                        pygame.display.update()
                        pygame.event.set_blocked(pygame.MOUSEBUTTONDOWN)
                        time.sleep(0.5)
                        pygame.event.set_allowed(pygame.MOUSEBUTTONDOWN)
                        display_text("correct!",white,(start_x-150),(start_y-650),medText)
                        pygame.display.update()
                    elif answer != correct_answer:
                        display_text("wrong!",red,(start_x-140),(start_y-650),medText)
                        pygame.display.update()
                        pygame.event.set_blocked(pygame.MOUSEBUTTONDOWN)
                        time.sleep(0.5)
                        pygame.event.set_allowed(pygame.MOUSEBUTTONDOWN)
                        display_text("wrong!",white,(start_x-140),(start_y-650),medText)
                        pygame.display.update()