Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Making a fading trail in processing

Tags:

processing

I have a circle that is moving across the screen, what i need is to be able to make that circle leave a line behind it that fades after a second or so. I'm using Processing.

like image 576
Sam Castledine Avatar asked Aug 07 '26 09:08

Sam Castledine


2 Answers

Can't speak for its efficiency but I imagine one way to do it would be to keep the old positions in an ArrayList? You can then draw lines between each point, as long as you push the current position each frame and remove the least recent. Hope it helps!

PVector circlePosition;
ArrayList<PVector> circleTrail;
int trailSize = 10;

void setup() {
  size(500, 500);
  circlePosition = new PVector(width*0.5, width*0.5);
  circleTrail = new ArrayList<PVector>();
}

void draw() {
  background(255);
  int trailLength;

  circlePosition = new PVector(mouseX, mouseY);
  circleTrail.add(circlePosition);

  trailLength = circleTrail.size() - 2;
  println(trailLength);

  for (int i = 0; i < trailLength; i++) {
    PVector currentTrail = circleTrail.get(i);
    PVector previousTrail = circleTrail.get(i + 1);

    stroke(0, 255*i/trailLength);
    line(
      currentTrail.x, currentTrail.y,
      previousTrail.x, previousTrail.y
    );
  }

  ellipse(circlePosition.x, circlePosition.y, 10, 10);

  if (trailLength >= trailSize) {
    circleTrail.remove(0);
  }

}
like image 88
hughsk Avatar answered Aug 10 '26 09:08

hughsk


I also can't speak to the efficiency of my method, but the way I've done it is by drawing a rectangle over your entire sketch each time with an also set to a low value (like 25 or so). This results in the objects from previous draw() cycles looking 'faded'. For example:

int i = 0;

void setup(){
  size(500,500);
  smooth();
  noStroke();
  background(255);
}

void draw(){
  fill(255,25);
  rect(0,0,width,height);
  fill(0);
  ellipse(width/2 + i,height/2 + i,50,50);
  delay(100);
  i+=10;
}
like image 43
nathan lachenmyer Avatar answered Aug 10 '26 09:08

nathan lachenmyer



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!