multiple mouse click recording on a single picture (not slide)
Eszter Kormann
ringril at gmail.com
Sat Nov 17 17:59:41 UTC 2012
Dear Paul,
please don't get tired of my stupid questions... I have two more.:)
1) I could not make this previous one work, so I decided to go into your
suggestion and ask how can I set up a slide that you have already
mentioned. I had this idea on my mind when I had started to plan the
experiment, but I thought that I will be challenging and hard to make
approximately 30 slides. But now I understood that the analysis of the data
will be a pain and even harder with this design, so I would be grateful if
you could explain how can I switch to the latter solution.
2) The second and most shamefully easy question would be in connection with
mouse hiding. I want the cursor to be hidden through the part, when the
program just shows the pictures. If it is there the cursor can be
distracting in a visual paradigm like this. However, I really need the
mouse to be shown when we ask for and register mouse response (through the
exposition of the grid exercise). I found this in the help, but I'm a
starter (it was a week ago when I first saw the programme.. ), and I don't
know how could I make this work.
'This example loops through the available mouse cursors.
'EXAMPLE PART A
Instructions.Text = "Press the spacebar to \n begin " &_
"the mouse cursors demo..."
'EXAMPLE PART B
Display.Canvas.Clear
Display.Canvas.Text 0, 0, "Display the available mouse cursors..."
Mouse.ShowCursor True
Dim i As Integer
For i = 1 to 13
Mouse.ShowCursor False
Mouse.Cursor = i
Mouse.SetCursorPos Display.XRes/2, 20
Mouse.ShowCursor True
Display.Canvas.Text 50, 25, "Current mouse " &_
"cursor value = " & Mouse.Cursor
Sleep 2000
Next i
Display.Canvas.Clear
Mouse.ShowCursor False
c.SetAttrib "Stimulus", "End of cursors demonstration "
StimDisplay.Run
'terminate the rest of the experiment
StimDisplay.Duration = 0 'do not display the normal StimDisplay
List1.Terminate 'do not cycle
'Note: To run this example with E-BasicExample.es, copy the script in
'EXAMPLE PART A above and paste it into the Setup InLine object. Next
'copy the script in EXAMPLE PART B above and paste it into the Before
'InLine object.
Thanks a lot!!!!!!
Eszter
2012/11/16 Paul Groot <pfc.groot at gmail.com>
> Hi again Eszter,
>
> There are several way's to do this, but assuming your bitmap pictures are
> drawn unstretched in the middle of the screen (and have fixed dimensions),
> then you could try something like this (be warned, this will be uggly):
>
> Const N_x As Integer = 4 ' number of images hor.
> Const N_y As Integer = 4 ' number of images vert.
> Const size_x As Long = 1000 ' width of bitmap in pixels
> Const size_y As Long = 776 ' height of bitmap in pixels
> Dim offset_x As Long
> Dim offset_y As Long
> Dim index_x As Integer
> Dim index_y As Integer
> Dim delta_x As Long
> Dim delta_y As Long
> offset_x = (size_x - Display.XRes)/2
> delta_x = size_x / N_x
> index_x = (theMouseResponseData.CursorX-offset_x)/delta_x
> offset_y = (size_y - Display.YRes) / 2
> delta_y = size_y / N_y
> index_y = (theMouseResponseData.CursorY-offset_y)/delta_y
>
> Dim index As Integer
> index = (index_y-1)*N_x+index_x
> debug.print "I=" & index & " (" & index_x & "," & index_y & ")"
>
> You could put this inside the if-then-endif part to get the subimage
> indices of the selected images (ranging from 1 to 16; counting row-by-row)
> The next thing to do would be a simple test if the indices match the
> correct answer. Normally you would but the correct answer as attributes in
> the trial list. However, because all 8 clicks are handled within a single
> trial, you would have to specify the correct indices for all 8 clicks as 8
> separate attributes (i.e. 'CorrectCLick.1', 'CorrectCLick.2' etc.).
>
> Dim correct_index As Integer
> correct_index = CInt(c.GetAttrib("CorrectClick." &
> CStr(iResponse)))
> c.SetAttrib "ClickACC." & CStr(iResponse), IIf(index =
> correct_index, 1, 0)
>
> I'm sure there are dozens of bugs in this code, but this is the general
> idea if your stimulus is a single bitmap image. As said before, this is not
> a very elegant piece of work. And there still things going wrong here (for
> example: the black borders are also treated as valid subimage area). A more
> elegant way would be to use a hidden bitmap that has a color map that
> mappes the valid subimage areas to a subimage number. Then a simple
> getpixel-call would return the selected image. (Also works for
> non-rectangular areas.) Another option would be to use a slide with 4x4
> separate slide images. This would also simplify the script because EStudio
> has a special HitTest function that can be used to test which object was
> selected.
>
>
> Cheers
> Paul
>
>
>
> 2012/11/15 Eszter Kormann <ringril at gmail.com>
>
>> Dear Paul,
>>
>> thank you for your quick and amazing answer, everything works :)
>> However, we faced the problem of marking good and bad answers in this
>> case, because we only get the x and y coordinates for the clicks whereas we
>> need to compare this with the small pictures coordinates on the screen.
>> I don't know if I made it clear or not, but we would like to 1) pinpoint
>> the frames for the small pictures 2) define which (small) picture within
>> the grid is meant to be a good answer in the trial and 3) then we want the
>> program to decide whether the click of the responder was correct or not.
>> We thought that we might use something like an *if "mouse coordinate is
>> XY" < x1 > x2 then "YES", otherwise NO. * Sorry for the form, but
>> unfortunately I still don’t know this language.
>>
>> I know it sounds awfully complicated, but I really need your help.
>>
>> Thanks a lot in advance!!!
>> All the best,
>> Eszter
>>
>>
>> 2012/11/13 Paul Groot <pfc.groot at gmail.com>
>>
>>> Hi Eszter,
>>>
>>> You could change the inline script a bit, but you would first have to
>>> set the number of allowed responses of the inputmask to 8 (click the
>>> advanced button and edit max count). Then use the following script after
>>> the stimulus object:
>>>
>>> Dim iResponse As Integer
>>> For iResponse = 1 To Stimulus.InputMasks.Responses.Count
>>> Dim theMouseResponseData As MouseResponseData
>>> Set theMouseResponseData =
>>> CMouseResponseData(Stimulus.InputMasks.Responses(iResponse))
>>> If Not theMouseResponseData Is Nothing Then
>>> c.SetAttrib "Stimulus." & CStr(iResponse) & ".RespCursorX",
>>> theMouseResponseData.CursorX
>>> c.SetAttrib "Stimulus." & CStr(iResponse) & ".RespCursorY",
>>> theMouseResponseData.CursorY
>>> c.SetAttrib "Stimulus." & CStr(iResponse) & ".RT",
>>> theMouseResponseData.RT
>>> End If
>>> Next
>>>
>>> I also added the response time to the output because you might need that
>>> too. (Or just delete that line if you don't) The attached script contains a
>>> working example.
>>>
>>> Normally I would prefer a separate list object with 8 'subtrials' to
>>> handle the individual mouse clicks. The advantage would be a more more
>>> compact edat-output file(because you don't have to generate separate
>>> attribute names for sequential responses). Another advantage is that you
>>> could implement more sophisticated constructions, like highlighting the
>>> selected objects as soon as they are selected or terminating after a
>>> specific object was selected. However, the disadvantage is that it is
>>> slightly more complex if response time recording should be accurate.
>>>
>>> Hope this helps.
>>>
>>> Cheers,
>>> Paul
>>>
>>>
>>> 2012/11/13 Eszter Kormann <ringril at gmail.com>
>>>
>>>> Hello,
>>>>
>>>> So, once again :)
>>>> I have a very simple problem in connection with collecting multiple
>>>> mouse response coordinates. We use a single picture which consists of
>>>> several pictures in a 4X4 grid (I've attached a sample). People are asked
>>>> to click on those pictures within the grid which we had already shown to
>>>> them (8 clicks out of 16). How can I register all of the 8 clicks's
>>>> coordinates with the modification of the script linked below, which in
>>>> fact works perfectly well for our experiment.
>>>>
>>>>
>>>>
>>>>
>>>> If Stimulus.InputMasks.Responses.Count > 0 Then
>>>>
>>>> Dim theMouseResponseData As MouseResponseData
>>>> Set theMouseResponseData =
>>>> CMouseResponseData(Stimulus.InputMasks.Responses(1))
>>>> If theMouseResponseData Is Nothing Then
>>>> c.SetAttrib "Stimulus.RespCursorX", theMouseResponseData.CursorX
>>>> c.SetAttrib "Stimulus.RespCursorY", theMouseResponseData.CursorY
>>>> End If
>>>>
>>>> End If
>>>>
>>>>
>>>> Thanks a lot,
>>>> Eszter
>>>>
>>>> * *
>>>>
>>>> --
>>>> You received this message because you are subscribed to the Google
>>>> Groups "E-Prime" group.
>>>> To post to this group, send email to e-prime at googlegroups.com.
>>>> To unsubscribe from this group, send email to
>>>> e-prime+unsubscribe at googlegroups.com.
>>>> For more options, visit https://groups.google.com/groups/opt_out.
>>>>
>>>>
>>>>
>>>
>>> --
>>> You received this message because you are subscribed to the Google
>>> Groups "E-Prime" group.
>>> To post to this group, send email to e-prime at googlegroups.com.
>>> To unsubscribe from this group, send email to
>>> e-prime+unsubscribe at googlegroups.com.
>>> For more options, visit https://groups.google.com/groups/opt_out.
>>>
>>>
>>>
>>
>> --
>> You received this message because you are subscribed to the Google Groups
>> "E-Prime" group.
>> To post to this group, send email to e-prime at googlegroups.com.
>> To unsubscribe from this group, send email to
>> e-prime+unsubscribe at googlegroups.com.
>> For more options, visit https://groups.google.com/groups/opt_out.
>>
>>
>>
>
> --
> You received this message because you are subscribed to the Google Groups
> "E-Prime" group.
> To post to this group, send email to e-prime at googlegroups.com.
> To unsubscribe from this group, send email to
> e-prime+unsubscribe at googlegroups.com.
> For more options, visit https://groups.google.com/groups/opt_out.
>
>
>
--
You received this message because you are subscribed to the Google Groups "E-Prime" group.
To post to this group, send email to e-prime at googlegroups.com.
To unsubscribe from this group, send email to e-prime+unsubscribe at googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listserv.linguistlist.org/pipermail/eprime/attachments/20121117/ff8324d1/attachment.htm>
More information about the Eprime
mailing list