2014-11-05 47 views
0

我正在設置一個Fitts法則實驗,我希望參與者點擊一個開始按鈕,將鼠標移動到一條直線上,然後單擊一個目標。點擊開始後,如果參與者在垂直方向上將鼠標向上或向下移動的距離過遠,我希望顯示30秒的白色屏幕並接受任何輸入,然後移動到下一個試驗。基於鼠標位置的心理事件

目前,無論如何,實驗的行爲就好像我正在超出可接受範圍並始終執行if語句。

這裏是它的代碼,我現在所擁有的:

from psychopy import core 

start = mouse.isPressedIn(polygon, buttons=[0]) 


if start==True: 
    thisExp.addData('starttime',core.getTime()) 
    x, y = mouse.getPos() 
    mouse.x.append(x) 
    mouse.y.append(y) 
    if y>10 or y<-10:   #this is the statement that isn't resulting in what I would expect 
thisExp.addData('penalty',1) 

finish = mouse.isPressedIn(polygon2, buttons=[0]) 

if finish==True: 
    thisExp.addData('stoptime',core.getTime()) 
    continueRoutine=False 

我還沒有想出一切,我需要的嵌套的if語句下呢。現在我只是想確保它能正常工作。它從不評估if語句爲真,並且從不增加懲罰,即使查看收集到的csv文件中的mouse.y列表數據,我可以看到有些情況下,y在我設置的任何範圍之外。

似乎在試驗開始後立即收集鼠標位置數據,而不是在點擊多邊形後。但是,開始時間和停止時間似乎基於點擊多邊形和多邊形2的時間。我真的不確定發生了什麼事。

更新: 由於某種原因,我沒有得到關於Jonas的迴應的通知,直到一天後。我希望是因爲它會讓我在幾個小時前走上正軌。這是一個構建器代碼組件。

我的代碼全部都在運行每一幀。在程序的開始,我說:

checkstart = False 

與下面的代碼每一幀解決了這個特殊的問題:爲什麼點擊多邊形前鼠標位置被收集

start = mouse.isPressedIn(polygon, buttons=[0]) 

if start==True: 
    thisExp.addData('starttime',core.getTime()) 
    x, y = mouse.getPos() 
    mouse.x.append(x) 
    mouse.y.append(y) 
    checkstart=True; 

if checkstart==True: 
    if y>10 or y <-10: 
     thisExp.addData('penalty',1) 


finish = mouse.isPressedIn(polygon2, buttons=[0]) 

if finish==True: 
    thisExp.addData('stoptime',core.getTime()) 
    continueRoutine=False 

我仍然不知道但對我來說並不重要。我可以將鼠標單擊框架的數據與啓動按鈕對應的位置相匹配,以獲得鼠標路徑跟蹤的開始。

+0

只是爲了確保:這是在Builder代碼組件還是在完全基於代碼的實驗中?這裏有幾個想法/:(1)如果窗口是什麼單位? 'norm','pix','deg'還是其他? (2)這段代碼是在每一幀還是在一個循環中運行?這個環境會很好。請用這個信息更新問題,我們會解決這個問題。 – 2014-11-05 22:10:42

+0

感謝您的評論。你絕對在考慮正確的事情。 – Wes 2014-11-07 01:16:07

+0

酷!你可以在StackOverflow上回答你自己的問題,所以考慮將你的答案複製粘貼到下面的答案上,並接受你自己的答案。那麼很明顯,這個問題已經解決了。而且,將來遇到同樣問題的人會在這裏找到一個很好的Q/A格式的答案:-) – 2014-11-07 09:09:57

回答

0

我的代碼全部都在運行每一幀。在程序的開始,我說:

checkstart = False 

與下面的代碼每一幀解決了這個特殊的問題:爲什麼點擊多邊形前鼠標位置被收集

start = mouse.isPressedIn(polygon, buttons=[0]) 

if start==True: 
    thisExp.addData('starttime',core.getTime()) 
    x, y = mouse.getPos() 
    mouse.x.append(x) 
    mouse.y.append(y) 
    checkstart=True; 

if checkstart==True: 
    if y>10 or y <-10: 
     thisExp.addData('penalty',1) 


finish = mouse.isPressedIn(polygon2, buttons=[0]) 

if finish==True: 
    thisExp.addData('stoptime',core.getTime()) 
    continueRoutine=False 

我仍然不知道但對我來說並不重要。我可以將鼠標單擊框架的數據與啓動按鈕對應的位置相匹配,以獲得鼠標路徑跟蹤的開始。