好吧,这里的问题是,在恢复点击时,第一个条件得到满足,变量设置为true。紧接着,事件就像......仍然继续或者其他什么,变量为false满足第二个条件,它立即将变量重置为true。关于如何解决这类问题的任何想法?
for event in pygame.event.get():
if event.type == MOUSEBUTTONDOWN :
x, y = event.pos
if TutorialOn == True:
if x >= 25 and x <= 175 and y >= 350 and y<= 450:
TutorialOn = False
if TutorialOn == False:
if x >= 25 and x <= 175 and y >= 350 and y<= 450:
TutorialOn = True
答案 0 :(得分:3)
使用elif
声明。 elif
表示“其他如果”。如果第一个条件是真的,那么你的第二个条件将不会被测试,那么你就不会有这个问题。
for event in pygame.event.get():
if event.type == MOUSEBUTTONDOWN :
x, y = event.pos
if TutorialOn == True:
if x >= 25 and x <= 175 and y >= 350 and y<= 450:
TutorialOn = False
elif TutorialOn == False:
if x >= 25 and x <= 175 and y >= 350 and y<= 450:
TutorialOn = True
另外,需要注意的是,您的逻辑可以进一步简化。您无需执行if TutorialOn == True:
。 if
语句为您执行此操作。如果TutorialOn
恰好不是真的,那么它只有一个可能的布尔值,False!因此,第二个条件不需要进行测试,您只需使用一个简单的else
语句就可以完全没有条件。当您使用没有条件的else
语句时,如果之前的if
或elif
语句结果为False,则后面的代码块将立即执行。请参阅以下代码简化:
for event in pygame.event.get():
if event.type == MOUSEBUTTONDOWN :
x, y = event.pos
if TutorialOn:
if x >= 25 and x <= 175 and y >= 350 and y<= 450:
TutorialOn = False
else:
if x >= 25 and x <= 175 and y >= 350 and y<= 450:
TutorialOn = True
@Paulo在评论中指出,你可以进一步简化。因为如果条件TutorialOn
恰好为真,你所做的就是翻转x >= 25 and x <= 175 and y >= 350 and y<= 450
的布尔值,你可以使用一个简单的not
语句来“切换”它。
for event in pygame.event.get():
if event.type == MOUSEBUTTONDOWN :
x, y = event.pos
if x >= 25 and x <= 175 and y >= 350 and y<= 450:
TutorialOn = not TutorialOn