除非我单击左上角的退出按钮(该按钮不会关闭我的游戏),否则,单击按钮的功能不会运行,而是执行我实际上要执行的任务。救命?
def game_intro():
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
return
elif event.type == pygame.MOUSEMOTION:
for button in buttons:
if button[1].collidepoint(event.pos):
button[2] = HOVER_COLOR
else:
button[2] = BLACK
screen.blit(bg, (0, 0))
for text, rect, color in buttons:
pygame.draw.rect(screen, color, rect)
screen.blit(text, rect)
pygame.display.flip()
def button_clicked():
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
return
if event.type == pygame.MOUSEBUTTONDOWN:
print('test')
pygame.display.flip()
clock.tick(60)
game_intro()
button_clicked
pygame.quit()
答案 0 :(得分:1)
您的game_intro
函数有一个无限循环while True:
,您只能从一个地方退出:
if event.type == pygame.QUIT:
return
因此,直到您退出,该函数才永远不会返回。
这意味着其余代码将永远不会运行。
还有一个问题:退出并返回函数后,您尝试做更多的事情,而不是按照用户要求退出。
第三个问题掩盖了第二个问题:您忘记了实际呼叫button_clicked()
;您只需引用button_clicked
函数,该函数什么都不做。
无论如何,您可能想要做的是在顶层摆脱button_clicked
,并向主事件循环添加if
测试,如果用户使用,则调用button_clicked()
点击按钮。
那种设计会很奇怪。通常,您希望游戏只有一个框架或事件循环,而不是从一个循环跳到另一个循环。但这不是非法的,也不会做任何事,它会在这里满足您的要求。
我们在这里:
clock.tick(60)
,而不仅仅是第二个循环。pygame.display.flip()
,而不是在循环中每次都调用一次。但是这两个问题(最坏的情况)将导致闪烁和CPU使用率过高,而不是实际的行为破坏。
答案 1 :(得分:0)
button_clicked方法被称为:)时缺少一组括号:
game_intro()
button_clicked()
pygame.quit()