【问题标题】:Making a fading trail in processing在处理过程中留下一个衰落的痕迹
【发布时间】:2013-02-05 20:44:05
【问题描述】:

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

【问题讨论】:

    标签: processing


    【解决方案1】:

    不能说它的效率,但我想一种方法是将旧位置保​​留在 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);
      }
    
    }
    

    【讨论】:

      【解决方案2】:

      无法说明我的方法的效率,但我做到这一点的方式是每次在整个草图上绘制一个矩形,并将其设置为低值(比如 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;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-10-05
        • 2011-09-09
        • 1970-01-01
        • 2013-09-07
        • 2011-01-31
        • 2023-04-05
        • 1970-01-01
        相关资源
        最近更新 更多