There are some neat aspects to the mouse that can make for interesting interactive experiments
It’s the easiest thing in the world to make a stimulus appear at the location of the mouse:
add a Mouse Component (let’s call it mouse)
set the position of your stimulus to be at mouse.getPos() and update on every frame
Most stimuli (except for text) have a method .contains() and so we can test whether the mouse is at that location.
Let’s create a circle called myStim and an object that tracks the mouse, called marker and make marker change color if it goes inside the circle.
All we need is a Code Component with “Each Frame” set to:
if myStim.contains(mouse): marker.color = 'red' else: marker.color = 'blue'
To take this online we need a slight edit:
polygon.fillColor = new util.Color("red");
polygon.color = 'red'
The stimulus that you test can be moving and that’s fine too. The .contains() method doesn’t care if the position is changing!
The “stimulus” can also be invisible (so you’re effectively just using it to define an “area” rather than a stimulus).
You can continuously check if a mouse is pressed in an object using the mouse.isPressedIn(x) method. To check if the mouse is in the area of x and if one of the buttons is pressed in.
OK so we have covered the basics of making a task and how to do exciting dynamic things with the mouse. Let’s touch on a relatively new response type…
Let’s practice what we know about mouse inputs to make a dot to dot demo. Participants will see a set of polygons and connect them (this allows us also to try the brush component!). When the mouse enters a polygon change it’s colour.
A number of polygons (keep the number small for now)
The ‘brush’ component (our pencil to join the dots)
A code component to turn the polygons red when the mouse is clicked in their location
If you still have time Repeat our dot-to-dot trial 3 times and present the dots in new locations on each trial. Use a clickable button to end each trial.
We have already seen how we can use ‘conditional if’ statements in python. And we could just use several of these statements to check if the mouse is in each polygon individually e.g.:
if mouse.isPressedIn(polygon1): polygon1.color = 'red' if mouse.isPressedIn(polygon2): polygon1.color = 'red' if mouse.isPressedIn(polygon3): polygon1.color = 'red'
Alternatively, we could use a ‘for’ loop…
For loops allow us to repeat the same set of code over a predifined n or over a set of objects. e.g.:
polygons=[polygon1, polygon2, polygon3] for polygon in polygons: if mouse.isPressedIn(polygon): polygon.color = 'red'