Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Supported by

[open] Moving Object

edited June 2015 in OpenSesame

Dear all,

I am very new to OpenSesame and to Python programming - however, I would like to ask you for a little help regarding a target-interception task.

Basically, in my experiment I have some troubles creating a command for a circle popping up at the left edge of the screen (y=0) and moving to the right to the opposite edge. The trial ends as soon as the participants click with the left button of the mouse within or outside the circle. So far, I was able to create the circle but not having the circle in motion. Any clues?

Moreover, I have another question following the issue described above. Is there a way to set a time duration after the which the circle changes color? For example, the circle starts to move from left to right but after 200 ms (or when it reaches specific spatial coordinates) it becomes white instead of black.

Thanks in advance for your help.

Alessio

Comments

  • edited 11:52AM

    Hi Alessio,

    You should think of a moving display as a series of frames. So what you would need to do is write an inline_script in which a canvas is redrawn over and over, each time with a circle at a slightly different position. And at the same time, you need to continuously check whether a mouse button was pressed, and, if so, end the loop. Do you see what I mean? The script below shows the general idea, although you'll probably have to modify it a bit for your purpose. (For example, to include a color change.)

    You can find useful information here:

    Good luck!

    Cheers,
    Sebastiaan

    from openexp.canvas import canvas
    from openexp.mouse import mouse
    
    # The Y coordinate in the middle of the screen
    y = self.get('height') / 2
    # The minimum and maximum X coordinates
    min_x = 100
    max_x = self.get('width') - 100
    # The displacement on each frame
    step_size = 1
    # The radius of the circle
    r = 10
    
    # Create a canvas and a mouse object
    my_canvas = canvas(exp)
    my_mouse = mouse(exp, timeout=0)
    
    # Loop through all X coordinates
    for x in range(min_x, max_x+1, step_size):
        # Clear the canvas, draw a circle, and show it
        my_canvas.clear()
        my_canvas.circle(x, y, r)
        my_canvas.show()
        # See if a button was clicked, and, if so, break the loop
        button, pos, timestamp = my_mouse.get_click()
        if button is not None:
            break
    
Sign In or Register to comment.