2013-11-22 9 views
0

Я программирую эксперимент с Pygame 1.9.2 на Python 2.7. В эксперименте я показываю изображение и прошу пользователя щелкнуть левой кнопкой мыши или правой кнопкой мыши на основе функции изображения (я заранее их инструктирую, когда нажимать что). Изображение отображается до тех пор, пока пользователь не нажмет, или если время отображения изображения превышает фиксированную продолжительность.`pygame.mouse.get_pressed()` обрабатывает клики, когда мышь не нажата

Вот фрагмент кода. (Надеюсь, что этот бит достаточно, чтобы понять, что делается.)

pygame.display.update() 
resp = None 
while 1: 
    dispEnd = time.time() 
    pygame.mouse.set_visible(True)  
    pygame.event.get() 
    ms = pygame.mouse.get_pressed()    
    if ms[0] or ms[2]: 
     rt = dispEnd - dispSt     
     if ms[0]: 
      resp = 'Yes' 
     else: 
      resp = 'No' 
     break 
    if dispEnd - dispSt >= changeDuration: 
     break 

Этот фрагмент кода является частью большого цикла, когда выбирается и отображается изображение, так что работает несколько раз.

Что происходит в непредсказуемое время, так это то, что программа не ждет ввода пользователя. Сразу после отображения изображения он входит в цикл while и работает так, как если бы мышь была нажата.

Это случайная ошибка и происходит в любое время; иногда прямо в начале программы, с самого первого запуска цикла; так что, вероятно, это происходит не из-за того, что очередь событий, возможно, не очищается (она при вызове pygame.event.get()), и она также не может быть по умолчанию для предыдущего щелчка мыши; иногда это происходит после нескольких итераций цикла. В любом случае, это катастрофически для эксперимента.

+1

Похоже, вы вызываете 'event.get()', а затем просто отбрасывая результат. Разве вы не должны делать 'if event.type == pygame.MOUSEBUTTONDOWN:' где-нибудь, если вы хотите определить, была ли нажата мышь? – Kevin

+0

Ну, я использую 'pygame.mouse.get_pressed()', чтобы нажимать кнопки мыши. Я вызываю 'pygame.mouse.get()', потому что в документации говорится: «Не забудьте вызвать pygame.event.get - получить события из очереди перед этой функцией, иначе это не сработает». И это не работает, если оно не вызвано. – radhanila

+0

Показать сообщения об ошибках (trackback) – furas

ответ

1

Попробуйте это:

... 
while 1: 
    dispEnd = time.time() 
    for event in pygame.event.get(): 
     if event.type == pygame.MOUSEBUTTONDOWN: 
      #do something   
    ... 
Смежные вопросы