Я программирую эксперимент с 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()
), и она также не может быть по умолчанию для предыдущего щелчка мыши; иногда это происходит после нескольких итераций цикла. В любом случае, это катастрофически для эксперимента.
Похоже, вы вызываете 'event.get()', а затем просто отбрасывая результат. Разве вы не должны делать 'if event.type == pygame.MOUSEBUTTONDOWN:' где-нибудь, если вы хотите определить, была ли нажата мышь? – Kevin
Ну, я использую 'pygame.mouse.get_pressed()', чтобы нажимать кнопки мыши. Я вызываю 'pygame.mouse.get()', потому что в документации говорится: «Не забудьте вызвать pygame.event.get - получить события из очереди перед этой функцией, иначе это не сработает». И это не работает, если оно не вызвано. – radhanila
Показать сообщения об ошибках (trackback) – furas