2015-06-05 2 views
1

Я использую функцию .isPressedIn(), если щелчок мыши находится в целевой форме. Однако, всякий раз, когда вы нажимаете на целевую фигуру, он скажет, что ответ неверен. Однако, всякий раз, когда вы держите кнопку мыши в целевой форме, она скажет, что мышь была нажата на цель. Я не уверен, как исправить кнопку мыши. Я пробовал использовать CustomMouse, но я не могу заставить это щелкнуть внутри фигуры (если я не ошибаюсь). Любые предложения будут ценны.Мышь click/release psychopy

Спасибо!

stimDuration = 5 #stimuli are on the screen for 5 seconds 
potential_target = [shape1, shape2, shape3] #shapes that may be a target 
target = random.sample(potential_target, 1) #randomly select a target 
myMouse = event.Mouse()      #define mouse 

if clock.getTime() >= stimDuration 
    ResponsePrompt.draw() #message to indicate to participant to select target 
    win.flip() 
    core.wait(2) 
    if myMouse.isPressedIn(target[0]): 
     print "correct" 
    else: 
     print "incorrect" 
+0

Думаю, нам нужно немного больше информации здесь, чтобы помочь вам. Не могли бы вы обновить свой вопрос еще одним кодом: что такое target [0]? Вы запускаете тест if-else в цикле, и если да, то этот цикл заполнен другими соответствующими материалами? Кроме того, часть щелчка состоит в том, чтобы удерживать кнопку в течение очень короткого времени, поэтому я просто хочу полностью убедиться, что вы говорите, что щелчок на форме печатает «неверно», удерживая кнопку на тех же самых отпечатках местоположения 'верный'? –

+0

Я обновил код. Код в настоящее время печатает «неправильный», если вы не удерживаете кнопку мыши постоянно. –

ответ

2

Проблема заключается в том, что линии myMouse.isPressedIn(target[0]) проверяет состояние мыши, когда именно эта линия запускается. Поскольку он предшествует core.wait(2), он не реагирует на щелчки мыши за эти две секунды и, следовательно, только собирает ответ мыши, вы все равно удерживаете его нажатой через две секунды.

У меня вместо этого была бы плотная петля вокруг myMouse.isPressedIn, которая запускается тысячи раз в секунду. Так пропуская ваши первые строки:

ResponsePrompt.draw() # message to indicate to participant to select target 
win.flip() # show that message 

while True: # keep looping. We will break this loop on a mouse press 
    if myMouse.isPressedIn(target[0]): # check if click is within shape 
     print "correct" 
     break # break loop if this condition was met 
    elif myMouse.getPressed(): # check if there was any mouse press at all, no matter location 
     print "incorrect" 
     break # break while loop if this condition was met 
1

В этом коде, вы используете выражение if myMouse.isPressedIn(target[0]), но только оценить, что выражение после некоторое время истекло (stimDuration). Это означает, что isPressedIn() будет, как правило, оцениваться после фактического щелчка. В этот момент мышь может больше не находиться в пределах target[0], или может быть больше не нажата субъектом. Поэтому я думаю, что вы видите правильное (ожидаемое) поведение.

Чтобы получить нужное поведение, вам нужно отслеживать, была ли нажата мышь в форме на каждом кадре.

Кроме того, я не уверен, как вы используете введенный вами код. Некоторые взгляды подходят для каждого фрейма, но похоже, что он должен запускаться только один раз (процедура Begin). Вы можете рассмотреть это: вещи не должны инициализироваться каждый кадр (например, target или myMouse).

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