In this simple programmeprogram, we animate an ellipse to always chase a point defined by the mouse. The ellipse only ever moves a percentage of the distance between it and the mouse target destination in each step.
The PVector object is used to handle the coordinates and the simple math operations.
Code Block |
---|
PVector pos; PVector targetPos; float easingFactor = 0.1; PVector mousePos; void setup() { size(8001000, 600); fill(0); pos = new PVector(0, 0); targetPos = new PVector(0, 0); } mousePos = new PVector(width/2, height/2); } void draw() { background(255); targetPos.set(mouseX,mouseYmousePos); targetPos = PVector.sub(targetPos, pos); // find the distancevector between mouse position and ellipse position on the x an y axis targetPos.mult(.2); // each step in the animation will move this percentage of the distance to the target position pos.add(targetPos); ellipse(pos.x, pos.y, 60, 60); } void mousePressed() { mousePos.set(mouseX, mouseY); }; |
Exercise 10
Add an additional ellipse that follows the mouse at a slower rate than the first ellipse.
Modify the code so that the ellipse always follows the mouse position.
Replace with the ellipse with another shape (like a triangle or even a car) , and keep it pointed towards the mouse.
Exercise Solution Using Arrays
Code Block | ||
---|---|---|
| ||
PVector[] pos; PVector[] targetPos; PVector mousePos; int arrayLength = 5; void setup() { size(1000, 600); fill(0); pos = new PVector[arrayLength]; targetPos = new PVector.mult(targetPos, easingFactor); // multiply the distance by the easingFactor to slow it down if(targetPos.mag() > .5) { //magnitude is always an absolute number, so we don't need to use the abs() function pos = PVector.add(pos,targetPos); }[arrayLength]; for (int i = 0; i<pos.length; i++) { pos[i] = new PVector(0, 0); targetPos[i] = new PVector(0, 0); } mousePos = new PVector(width/2, height/2); } void draw() { mousePos.set(mouseX, mouseY); background(255); for (int i = 0; i<pos.length; i++) { targetPos[i].set(mousePos); targetPos[i].sub(pos[i]); // find the vector between mouse position and ellipse position targetPos[i].mult((i*0.02)+.02); // each step in the animation will move this percentage of the distance to the target position pos[i].add(targetPos[i]); ellipse(pos[i].x, pos[i].y, 60, 60); } } |
Solution using a class.