轻松学习E-Prime(三十四):制作按钮?读取MouseResponseData中被试点击的位置

这一节我们准备制作按钮,也就是让用户能用鼠标来点击的按钮。比如说做选择题,我们让被试操纵鼠标来点击。
首先,我们要设置鼠标为显示的,我们可以在Device中设置:


设置鼠标为实验中可见

当然啦,我们也可以在实验过程中通过代码进行设置。如果您希望在实验过程中展示或隐藏鼠标,就必须用代码,方法如下:

Mouse.ShowCursor True

加入这一句到你想要显示鼠标的地方就可以了。相应的,隐藏自然就是把True改为False。
这一步很容易,接下来,问题的关键在于我们要接收被试点击鼠标的地方,判断是否点击到了物体。这一点,在E-Prime中提供了方法。
我们首先加入一个Slide1控件,在里面加入我们想要问的问题,以及相应的选项。比如说下面是我的“示例程序”里的无聊问题:


示例程序

正确答案是C。(顺便说一下,卡希尔将军是我大学时的外号)
那么我们要达到的效果就是,当被试用鼠标点击的时候,点到ABC三个选项框就提示错误,点到C提示正确,点到其他地方不做任何反应。
首先,我们要在Slide1中设置接收鼠标按键。

在Slide1中设置其接收鼠标按键

如果你想只允许被试按左键,就设定Allowable为1。
接下来先安排一下要用到的控件:
示例程序中的树状图

然后按步骤完成:
1.把FeedbackDisplay1的Input Object Name改为Slide1。
2为了方便代码的书写,我修改了Slide1中各控件的Name属性:
Slide1中各控件的Name属性

Name属性为“Text1”的SlideText对应的是显示问题的那个SlideText。自然,“OptionA”对应A选项,“OptionB”对应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


对应结果

Mouse.ShowCurser前面说过,用来设定鼠标是否显示。
接下来我们定义了一个名为theState的SlideState,SlideState就是我常说的Slide的页面,并设定它为Slide1中的Default页面。我们这次主要要用到的是其HitTest方法。该方法能检测某个点是否包含某个控件,并返回包含的控件的Name属性(如果没学过编程,“返回”一词你可以姑且可以这么理解。就是会会变成一个变量,然后你可以赋值给另一个变量)。当然它还有其他属性和方法,见下方。

SlideState类中包含的属性和方法

我们又定义了一个Point类的实例,名为ptMouse;还定义了一个string名为strHit。
Point类用来表示一个点,它有x属性和y属性。
接下来这句:

Mouse.GetCursorPos ptMouse.x, ptMouse.y

我们使用了鼠标的GetCursorPos方法,该方法的作用是,把鼠标当前的点分别赋给后面两个参数。在这个句子里,我们赋给了ptMouse的x属性和y属性。除非你有多个鼠标,否则鼠标默认名称Mouse。
当然,你也可以另外定义两个整数,比如:

Dim px as integer, py as integer
Mouse.GetCursorPos px, py

然后你调用GetCursorPos方法的时候,px和py的值就变成你鼠标当前坐标的x值和y值。比如你的鼠标这是在坐标为198,201的地方。那么px就变成198,py就变成201。同理,我们这次写的代码,会让ptMouse的x属性和y属性为鼠标点击时候的坐标的x值和y值。因为我们是在被试按下鼠标按键的瞬间,调用了GetCursorPos方法。
下一句:

strHit = theState.HitTest(ptMouse.x, ptMouse.y)

非常简单,我们调用了theState这个SlideState的HitTest方法,检查了ptMouse.x, ptMouse.y这一屏幕上的坐标是否有控件。如果有,就把控件的名字赋给strHit。
比如说被试点了Text1,strHit就是“Text1”;被试点了选项A,strHit就是“OptionA”(因为我设置其Name属性为OptionA);用户点了空白处,strHit就是“Default”。
因此接下来的这段语句:

if strHit = "Default" or strHit = "Text1" then
goto Label1
end if

我们判断了被试是不是点击了空白处或者点击了我们显示问题用的SlideText。如果是,就goto Label1,重来;如果不是,就说明用户点击了选项,程序继续。
然后接下来我们判断用户是否点击了正确的选项:

If strHit = "OptionC" Then
Slide1.ACC=1
else
Slide1.ACC=0
End If

ACC属性表示是否是正确的,1表示正确,0表示错误。通过设置ACC属性,来让FeedbackDisplay1显示我们要的内容。各个能记录反应的控件都有这个属性。
所以,如果strHit是“OptionC”的话,说明被试点击了选项C,那么我们设置Slide1的ACC属性为1,表示正确,FeedbackDisplay1就会显示“Correct”;否则说明点击了其它选项,ACC设为0,FeedbackDisplay1显示“Incorrect”。
看到这里你明白了吗?原来FeedbackDisplay是通过检查Input Object Name所表示的Object的ACC属性来判断自己要显示什么内容的。只不过过去我们没有使用代码来亲自设置,而是E-Prime通过我们设置的接收反应按键的控件的Correct属性来自动进行了判断。(本节可参考“示例实验3-14”

阶段练习

①设计一个实验。实验一共会在屏幕上显示10次刺激,每次刺激,屏幕上都显示一个问题和四个选项。四个选项里只有一个是正确的,被试必须移动鼠标,点击正确的选项。点击之后给予选择的结果被试是否正确的反馈。
②将上一题做如下修改:四个选项可能有多个是正确的,也可能没有正确选项。被试必须选择出他/她认为正确的那些选项,并点击“确定”按钮,之后给予正负反馈。被选中的Object通过把背景色变成红色来提示被选中。


此为开源免费教程。教程所用资源等请访问目录或专题,或者Github页面:
https://www.jianshu.com/p/5bbf1c274370
https://github.com/zkx654321/Learn-E-Prime-Easily

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,377评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,390评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,967评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,344评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,441评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,492评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,497评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,274评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,732评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,008评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,184评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,837评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,520评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,156评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,407评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,056评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,074评论 2 352