试图在pygame中创建一个切换类型按钮。有问题

时间:2013-09-14 23:56:35

标签: python pygame

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

1 个答案:

答案 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语句时,如果之前的ifelif语句结果为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