How would I be able to move a circle in different directions when the mouse is pressed?

Hey I am creating a simple application to move the a circle in multiple direction when the mouse is pressed. For example, I clicked the lower left part of the circle, so then it would move up going to the right. Same as if I tap the ball on the lower right, it would move the ball going up to the left.

This is my code:

float ballX = 200; float ballY = 0; float h = 50;

float speedY = 2;

void setup() { // fullScreen();




void draw() { background(0); fill(255);

ellipse(ballX, ballY, h,h);

speedY = speedY + 0.5;

ballY = ballY + speedY;

if (ballY > height - h) { ballY = height - h; // speedY = speedY * -0.9; }

if (ballY <=0) { speedY = -speedY; } }

void mousePressed() { speedY=-10; }

Thanks for any help in advance :D



  • Check if you clicked the ball. How far from the center of the ball does the click have to be for that to happen?

    If the ball was clicked, where was the click? Where is the ball? What can you say about the difference between those positions? Using that, can you now update the ball's speed?

  • edited March 21

    @TfGuy44 Yes sir, that is what has been troubling me. I am wondering how would there be like a division on the ball so that when clicked on the particular division it would do the action sir.

    How would I do that?

  • Try this example:

    You have a good code there for starters. What you need to do first is to check if you are inside the circle. Then you need to trace a vector from the mouse pointer to the center of the circle and that will direct the direction of motion. Are you familiar with vectors?


  • edited March 21

    @kfrajer Actualyl not yet sir, but your tutorial on springs is a good start and I might start reading up on Pvectors sir. :D

  • @kfrajer Thank you soo much sir, this will be alot of help :D

  • float posx,posy,diameter=100;
    void setup(){size(400,400);posx=posy=200;}
    void draw(){background(180);
    void mousePressed(){
    if(sq(mouseX-posx)+sq(mouseY-posy) < sq(diameter/2)){
    posx = lerp(posx,mouseX,-0.2);
    posy = lerp(posy,mouseY,-0.2);
Sign In or Register to comment.