在处理中做出消退的痕迹

时间:2012-02-09 16:59:05

标签: processing

我有一个在屏幕上移动的圆圈,我需要的是能够让那个圆圈在它后面留下一条线,在一秒左右之后消失。我正在使用Processing。

2 个答案:

答案 0 :(得分:4)

不能说它的效率,但我想有一种方法可以将旧位置保​​留在ArrayList中吗?然后,您可以在每个点之间绘制线条,只要您按下每帧的当前位置并删除最近的位置即可。希望它有所帮助!

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);
  }

}

答案 1 :(得分:4)

无法说出我方法的效率,但我这样做的方法是每次在整个草图上画一个矩形,同时设置为低值(像25左右)。这导致先前draw()循环中的对象看起来“褪色”。例如:

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;
}