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