2014-11-28 1 views
1

Я преподаю pygame, и я пытаюсь создать программу, которая меняет цвет квадрата после его нажатия. Проблема в том, что если пользователь нажимает на квадрат более чем на 1/60 секунды, квадрат начнет циклический переход между синим и оранжевым, мои два цвета выбора. Вот код, который должен переключить цвет квадрата:Ищет путь вокруг логической ошибки в программе pygame

if event.type == pygame.MOUSEBUTTONUP: 
    mousePos = pygame.mouse.get_pos() 
    if 130 < mousePos[0] < 250: 
     if 90 < mousePos[1] < 210: 
      if switching: 
       color = (255,100,0) 
      else: 
       color = (0,100,255) 
      switching = not switching 

Я сделал вывод, что это потому, что этот код в цикле игры, и Event.type не имеет его значение изменилось, если пользователь не перемещает мышь. Это означает, что он проходит секцию кода каждый раз, когда он проходит через игровой цикл, что означает, что цвет квадрата изменяется каждые 1/60 секунды с момента, когда пользователь освобождает свою мышь, пока они, наконец, не переместят свой курсор. Любые идеи о том, как обойти это?

ответ

1

Вы должны сохранить текущее «состояние» кнопки мыши - вверх или вниз.

Если это не так, и это было раньше, сделайте свой предмет переключения и установите состояние down. Если это down, то ничего не делайте.

Если кнопка мыши отпущена, сбросьте состояние до up.

+0

Спасибо, только что внедрил его. –

0

Думайте, что вы можете использовать pygame.MOUSEBUTTONUP, чтобы проверить, нажата ли мышь. Также вы можете установить цвет вне игрового цикла в переменную типа blue = (255,100,0), чтобы вы могли легче читать и легко для последующего программирования.

if event.type== pygame.MOUSEBUTTONDOWN: 
Смежные вопросы