這一節(jié)我們準(zhǔn)備制作按鈕,也就是讓用戶能用鼠標(biāo)來點擊的按鈕。比如說做選擇題,我們讓被試操縱鼠標(biāo)來點擊。
首先,我們要設(shè)置鼠標(biāo)為顯示的,我們可以在Device中設(shè)置:

當(dāng)然啦,我們也可以在實驗過程中通過代碼進(jìn)行設(shè)置。如果您希望在實驗過程中展示或隱藏鼠標(biāo),就必須用代碼,方法如下:
Mouse.ShowCursor True
加入這一句到你想要顯示鼠標(biāo)的地方就可以了。相應(yīng)的,隱藏自然就是把True改為False。
這一步很容易,接下來,問題的關(guān)鍵在于我們要接收被試點擊鼠標(biāo)的地方,判斷是否點擊到了物體。這一點,在E-Prime中提供了方法。
我們首先加入一個Slide1控件,在里面加入我們想要問的問題,以及相應(yīng)的選項。比如說下面是我的“示例程序”里的無聊問題:

正確答案是C。(順便說一下,卡希爾將軍是我大學(xué)時的外號)
那么我們要達(dá)到的效果就是,當(dāng)被試用鼠標(biāo)點擊的時候,點到ABC三個選項框就提示錯誤,點到C提示正確,點到其他地方不做任何反應(yīng)。
首先,我們要在Slide1中設(shè)置接收鼠標(biāo)按鍵。

如果你想只允許被試按左鍵,就設(shè)定Allowable為1。
接下來先安排一下要用到的控件:

然后按步驟完成:
1.把FeedbackDisplay1的Input Object Name改為Slide1。
2為了方便代碼的書寫,我修改了Slide1中各控件的Name屬性:

Name屬性為“Text1”的SlideText對應(yīng)的是顯示問題的那個SlideText。自然,“OptionA”對應(yīng)A選項,“OptionB”對應(yīng)B選項,依次類推。
3.在Inline1中輸入下列代碼:
Mouse.ShowCursor True
Dim theState as SlideState
Set theState = Slide1.States ("Default")
Dim ptMouse As Point
Dim strHit As String
Mouse.GetCursorPos ptMouse.x, ptMouse.y
strHit = theState.HitTest(ptMouse.x, ptMouse.y)
if strHit = "Default" or strHit = "Text1" then
goto Label1
end if
If strHit = "OptionC" Then
Slide1.ACC=1
else
Slide1.ACC=0
End If
對應(yīng)結(jié)果
Mouse.ShowCurser前面說過,用來設(shè)定鼠標(biāo)是否顯示。
接下來我們定義了一個名為theState的SlideState,SlideState就是我常說的Slide的頁面,并設(shè)定它為Slide1中的Default頁面。我們這次主要要用到的是其HitTest方法。該方法能檢測某個點是否包含某個控件,并返回包含的控件的Name屬性(如果沒學(xué)過編程,“返回”一詞你可以姑且可以這么理解。就是會會變成一個變量,然后你可以賦值給另一個變量)。當(dāng)然它還有其他屬性和方法,見下方。

我們又定義了一個Point類的實例,名為ptMouse;還定義了一個string名為strHit。
Point類用來表示一個點,它有x屬性和y屬性。
接下來這句:
Mouse.GetCursorPos ptMouse.x, ptMouse.y
我們使用了鼠標(biāo)的GetCursorPos方法,該方法的作用是,把鼠標(biāo)當(dāng)前的點分別賦給后面兩個參數(shù)。在這個句子里,我們賦給了ptMouse的x屬性和y屬性。除非你有多個鼠標(biāo),否則鼠標(biāo)默認(rèn)名稱Mouse。
當(dāng)然,你也可以另外定義兩個整數(shù),比如:
Dim px as integer, py as integer
Mouse.GetCursorPos px, py
然后你調(diào)用GetCursorPos方法的時候,px和py的值就變成你鼠標(biāo)當(dāng)前坐標(biāo)的x值和y值。比如你的鼠標(biāo)這是在坐標(biāo)為198,201的地方。那么px就變成198,py就變成201。同理,我們這次寫的代碼,會讓ptMouse的x屬性和y屬性為鼠標(biāo)點擊時候的坐標(biāo)的x值和y值。因為我們是在被試按下鼠標(biāo)按鍵的瞬間,調(diào)用了GetCursorPos方法。
下一句:
strHit = theState.HitTest(ptMouse.x, ptMouse.y)
非常簡單,我們調(diào)用了theState這個SlideState的HitTest方法,檢查了ptMouse.x, ptMouse.y這一屏幕上的坐標(biāo)是否有控件。如果有,就把控件的名字賦給strHit。
比如說被試點了Text1,strHit就是“Text1”;被試點了選項A,strHit就是“OptionA”(因為我設(shè)置其Name屬性為OptionA);用戶點了空白處,strHit就是“Default”。
因此接下來的這段語句:
if strHit = "Default" or strHit = "Text1" then
goto Label1
end if
我們判斷了被試是不是點擊了空白處或者點擊了我們顯示問題用的SlideText。如果是,就goto Label1,重來;如果不是,就說明用戶點擊了選項,程序繼續(xù)。
然后接下來我們判斷用戶是否點擊了正確的選項:
If strHit = "OptionC" Then
Slide1.ACC=1
else
Slide1.ACC=0
End If
ACC屬性表示是否是正確的,1表示正確,0表示錯誤。通過設(shè)置ACC屬性,來讓FeedbackDisplay1顯示我們要的內(nèi)容。各個能記錄反應(yīng)的控件都有這個屬性。
所以,如果strHit是“OptionC”的話,說明被試點擊了選項C,那么我們設(shè)置Slide1的ACC屬性為1,表示正確,F(xiàn)eedbackDisplay1就會顯示“Correct”;否則說明點擊了其它選項,ACC設(shè)為0,F(xiàn)eedbackDisplay1顯示“Incorrect”。
看到這里你明白了嗎?原來FeedbackDisplay是通過檢查Input Object Name所表示的Object的ACC屬性來判斷自己要顯示什么內(nèi)容的。只不過過去我們沒有使用代碼來親自設(shè)置,而是E-Prime通過我們設(shè)置的接收反應(yīng)按鍵的控件的Correct屬性來自動進(jìn)行了判斷。(本節(jié)可參考“示例實驗3-14”)
階段練習(xí)
①設(shè)計一個實驗。實驗一共會在屏幕上顯示10次刺激,每次刺激,屏幕上都顯示一個問題和四個選項。四個選項里只有一個是正確的,被試必須移動鼠標(biāo),點擊正確的選項。點擊之后給予選擇的結(jié)果被試是否正確的反饋。
②將上一題做如下修改:四個選項可能有多個是正確的,也可能沒有正確選項。被試必須選擇出他/她認(rèn)為正確的那些選項,并點擊“確定”按鈕,之后給予正負(fù)反饋。被選中的Object通過把背景色變成紅色來提示被選中。
此為開源免費教程。教程所用資源等請訪問目錄或?qū)n},或者Github頁面:
http://www.itdecent.cn/p/5bbf1c274370
https://github.com/zkx654321/Learn-E-Prime-Easily
