2013-09-14 3 views
1

Хорошо, поэтому проблема заключается в том, что при возобновлении щелчка первое условие выполняется, а переменной присваивается значение true. Сразу же после этого событие похоже ... все еще происходит или что-то еще, а переменная, являющаяся false, удовлетворяет второму условию, которое немедленно сбрасывает переменную в true. Любые идеи о том, как разрешить подобные вещи?Пытается сделать кнопку типа переключателя в pygame. Возникла проблема

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 

ответ

2

Используйте заявление elif. elif означает «else if». Если первое условие окажется истинным, то ваше второе условие вообще не будет проверено, и тогда у вас не будет этой проблемы.

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 без каких-либо условий, блок кода, который следует за ним, немедленно выполнится, если предыдущий операторили elif оказался ложным. Смотрите следующее упрощение кода:

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 
+0

Вау я чувствую себя немым. Благодарю. –

+1

Это может быть дополнительно упрощено: 'if 25 <= x <= 175 и 350 <= y <= 450: tutorialOn = not tutorialOn'. Но мне нравится ваш ответ, потому что я полагаю, что «elif» и «else» - самые полезные уроки здесь. –

+0

@PauloAlmeida Yup, можно использовать булевский переключатель. Очень хорошая точка. – Shashank

Смежные вопросы