這一節(jié)我們準(zhǔn)備制作按鈕,也就是讓用戶能用鼠標(biāo)來點(diǎn)擊的按鈕宣虾。比如說做選擇題惯裕,我們讓被試操縱鼠標(biāo)來點(diǎn)擊。
首先安岂,我們要設(shè)置鼠標(biāo)為顯示的轻猖,我們可以在Device中設(shè)置:
當(dāng)然啦,我們也可以在實(shí)驗(yàn)過程中通過代碼進(jìn)行設(shè)置域那。如果您希望在實(shí)驗(yàn)過程中展示或隱藏鼠標(biāo)咙边,就必須用代碼猜煮,方法如下:
Mouse.ShowCursor True
加入這一句到你想要顯示鼠標(biāo)的地方就可以了。相應(yīng)的败许,隱藏自然就是把True改為False王带。
這一步很容易,接下來市殷,問題的關(guān)鍵在于我們要接收被試點(diǎn)擊鼠標(biāo)的地方愕撰,判斷是否點(diǎn)擊到了物體。這一點(diǎn)醋寝,在E-Prime中提供了方法搞挣。
我們首先加入一個(gè)Slide1控件,在里面加入我們想要問的問題音羞,以及相應(yīng)的選項(xiàng)囱桨。比如說下面是我的“示例程序”里的無聊問題:
正確答案是C。(順便說一下嗅绰,卡希爾將軍是我大學(xué)時(shí)的外號(hào))
那么我們要達(dá)到的效果就是舍肠,當(dāng)被試用鼠標(biāo)點(diǎn)擊的時(shí)候,點(diǎn)到ABC三個(gè)選項(xiàng)框就提示錯(cuò)誤窘面,點(diǎn)到C提示正確翠语,點(diǎn)到其他地方不做任何反應(yīng)。
首先财边,我們要在Slide1中設(shè)置接收鼠標(biāo)按鍵肌括。
如果你想只允許被試按左鍵,就設(shè)定Allowable為1制圈。
接下來先安排一下要用到的控件:
然后按步驟完成:
1.把FeedbackDisplay1的Input Object Name改為Slide1们童。
2為了方便代碼的書寫畔况,我修改了Slide1中各控件的Name屬性:
Name屬性為“Text1”的SlideText對(duì)應(yīng)的是顯示問題的那個(gè)SlideText鲸鹦。自然,“OptionA”對(duì)應(yīng)A選項(xiàng)跷跪,“OptionB”對(duì)應(yīng)B選項(xiàng)馋嗜,依次類推。
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
對(duì)應(yīng)結(jié)果
Mouse.ShowCurser前面說過吵瞻,用來設(shè)定鼠標(biāo)是否顯示葛菇。
接下來我們定義了一個(gè)名為theState的SlideState,SlideState就是我常說的Slide的頁面橡羞,并設(shè)定它為Slide1中的Default頁面眯停。我們這次主要要用到的是其HitTest方法。該方法能檢測某個(gè)點(diǎn)是否包含某個(gè)控件卿泽,并返回包含的控件的Name屬性(如果沒學(xué)過編程莺债,“返回”一詞你可以姑且可以這么理解。就是會(huì)會(huì)變成一個(gè)變量,然后你可以賦值給另一個(gè)變量)齐邦。當(dāng)然它還有其他屬性和方法椎侠,見下方。
我們又定義了一個(gè)Point類的實(shí)例措拇,名為ptMouse我纪;還定義了一個(gè)string名為strHit。
Point類用來表示一個(gè)點(diǎn)丐吓,它有x屬性和y屬性浅悉。
接下來這句:
Mouse.GetCursorPos ptMouse.x, ptMouse.y
我們使用了鼠標(biāo)的GetCursorPos方法,該方法的作用是券犁,把鼠標(biāo)當(dāng)前的點(diǎn)分別賦給后面兩個(gè)參數(shù)仇冯。在這個(gè)句子里,我們賦給了ptMouse的x屬性和y屬性族操。除非你有多個(gè)鼠標(biāo)苛坚,否則鼠標(biāo)默認(rèn)名稱Mouse。
當(dāng)然色难,你也可以另外定義兩個(gè)整數(shù)泼舱,比如:
Dim px as integer, py as integer
Mouse.GetCursorPos px, py
然后你調(diào)用GetCursorPos方法的時(shí)候,px和py的值就變成你鼠標(biāo)當(dāng)前坐標(biāo)的x值和y值枷莉。比如你的鼠標(biāo)這是在坐標(biāo)為198,201的地方娇昙。那么px就變成198,py就變成201笤妙。同理冒掌,我們這次寫的代碼,會(huì)讓ptMouse的x屬性和y屬性為鼠標(biāo)點(diǎn)擊時(shí)候的坐標(biāo)的x值和y值蹲盘。因?yàn)槲覀兪窃诒辉嚢聪率髽?biāo)按鍵的瞬間股毫,調(diào)用了GetCursorPos方法。
下一句:
strHit = theState.HitTest(ptMouse.x, ptMouse.y)
非常簡單召衔,我們調(diào)用了theState這個(gè)SlideState的HitTest方法铃诬,檢查了ptMouse.x, ptMouse.y這一屏幕上的坐標(biāo)是否有控件。如果有苍凛,就把控件的名字賦給strHit趣席。
比如說被試點(diǎn)了Text1,strHit就是“Text1”醇蝴;被試點(diǎn)了選項(xiàng)A宣肚,strHit就是“OptionA”(因?yàn)槲以O(shè)置其Name屬性為OptionA);用戶點(diǎn)了空白處悠栓,strHit就是“Default”霉涨。
因此接下來的這段語句:
if strHit = "Default" or strHit = "Text1" then
goto Label1
end if
我們判斷了被試是不是點(diǎn)擊了空白處或者點(diǎn)擊了我們顯示問題用的SlideText弧呐。如果是,就goto Label1嵌纲,重來俘枫;如果不是,就說明用戶點(diǎn)擊了選項(xiàng)逮走,程序繼續(xù)鸠蚪。
然后接下來我們判斷用戶是否點(diǎn)擊了正確的選項(xiàng):
If strHit = "OptionC" Then
Slide1.ACC=1
else
Slide1.ACC=0
End If
ACC屬性表示是否是正確的,1表示正確师溅,0表示錯(cuò)誤茅信。通過設(shè)置ACC屬性,來讓FeedbackDisplay1顯示我們要的內(nèi)容墓臭。各個(gè)能記錄反應(yīng)的控件都有這個(gè)屬性蘸鲸。
所以,如果strHit是“OptionC”的話窿锉,說明被試點(diǎn)擊了選項(xiàng)C酌摇,那么我們設(shè)置Slide1的ACC屬性為1,表示正確嗡载,F(xiàn)eedbackDisplay1就會(huì)顯示“Correct”窑多;否則說明點(diǎn)擊了其它選項(xiàng),ACC設(shè)為0洼滚,F(xiàn)eedbackDisplay1顯示“Incorrect”埂息。
看到這里你明白了嗎?原來FeedbackDisplay是通過檢查Input Object Name所表示的Object的ACC屬性來判斷自己要顯示什么內(nèi)容的遥巴。只不過過去我們沒有使用代碼來親自設(shè)置千康,而是E-Prime通過我們設(shè)置的接收反應(yīng)按鍵的控件的Correct屬性來自動(dòng)進(jìn)行了判斷。(本節(jié)可參考“示例實(shí)驗(yàn)3-14”)
階段練習(xí)
①設(shè)計(jì)一個(gè)實(shí)驗(yàn)铲掐。實(shí)驗(yàn)一共會(huì)在屏幕上顯示10次刺激拾弃,每次刺激,屏幕上都顯示一個(gè)問題和四個(gè)選項(xiàng)迹炼。四個(gè)選項(xiàng)里只有一個(gè)是正確的砸彬,被試必須移動(dòng)鼠標(biāo),點(diǎn)擊正確的選項(xiàng)斯入。點(diǎn)擊之后給予選擇的結(jié)果被試是否正確的反饋。
②將上一題做如下修改:四個(gè)選項(xiàng)可能有多個(gè)是正確的蛀蜜,也可能沒有正確選項(xiàng)刻两。被試必須選擇出他/她認(rèn)為正確的那些選項(xiàng),并點(diǎn)擊“確定”按鈕滴某,之后給予正負(fù)反饋磅摹。被選中的Object通過把背景色變成紅色來提示被選中滋迈。
此為開源免費(fèi)教程。教程所用資源等請(qǐng)?jiān)L問目錄或?qū)n}户誓,或者Github頁面:
http://www.reibang.com/p/5bbf1c274370
https://github.com/zkx654321/Learn-E-Prime-Easily