1

好的,所以这里的问题是,在恢复点击时,第一个条件得到满足,并且变量设置为 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
4

1 回答 1

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碰巧不是真的,那么它只有一个可能的布尔值,假!因此,不需要测试第二个条件,您可以使用else完全没有条件的简单语句。当您使用不带条件的语句时,如果前面的or语句结果为 False else,则后面的代码块将立即执行。请参阅以下代码简化:ifelif

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
于 2013-09-14T23:58:29.953 回答