处理对象上的 lerpColor

lerpColor on objects with Processing

我目前正在创建一种带有处理的绘图工具,其中用鼠标指针绘制黑色椭圆,一段时间后完全消失为白色 - 即不再可见。整个东西看起来像是一种手指压力传感器……我已经有了第一个可以找到的方法 here。在第二种方法(见下面的代码)中,我使用 ArrayList 作为椭圆,与 PVector 相关——为了避免所有椭圆同时消失,我认为有必要将单个椭圆视为一个对象,其中包含淡出(使用 lerpColor)。我仍然无法让它工作,鼠标指针处的“最重要”椭圆始终保持黑色,然后椭圆逐渐消失......所以,只有每个椭圆分别消失......我是什么丢失的?或者我可能扭曲了代码中的某些内容?我需要对象吗?

float counter;

ArrayList<PVector> positionsList;

Brush myBrush;

void setup() {
  size(600, 600);
  positionsList = new ArrayList<PVector>();

}


void draw() {
  background(255);
    for (PVector p : positionsList) {
  color from = color(0);
  color to = color(255);
  color faded = lerpColor(from, to, counter);
  myBrush = new Brush(faded, p.x, p.y); 
  myBrush.display();
  
}

     positionsList.add(new PVector(mouseX, mouseY));
    }

class Brush {
  color tempC;
  float xpos;
  float ypos;
  color c;

  Brush(color tempC, float tempXpos, float tempYpos) {
    c = tempC;
    xpos = tempXpos;
    ypos = tempYpos;
  }
  void display() {
    noStroke();
    fill(c);
    ellipse(xpos, ypos, 50, 50);
    counter = counter + 0.01;
  }
}

您的代码中存在一些问题:

  1. counter 是全局的。所以笔刷共享同一个计数器,也就是说:

1-1。所有 ellipse 的颜色都相同,

1-2。 counter = counter + 0.01 正在对同一个变量进行计算,使其消失得非常快。

  1. colortempCBrush中有点模棱两可。 class 变量 tempC 已声明但未使用,而您将另一个 tempC 作为参数。

  2. Brush.display > fill(c)c 的值永远不会改变。一旦你将 tempC 作为参数,它使用的值就永远不会改变。

我解决了以下问题:

ArrayList<Brush> brushList;

void setup() {
    size(600, 600);
    brushList = new ArrayList<Brush>();
    
}


void draw() {
    background(255);
    
    float counter = 0;
    
    for (Brush brush : brushList) {
        brush.display();
    }
    
    brushList.add(new Brush(mouseX, mouseY));
}


class Brush {
    float xpos;
    float ypos;
    float counter;
    
    Brush(float tempXpos, float tempYpos) {
        xpos = tempXpos;
        ypos = tempYpos;
        counter = 0;
    }
    void display() {
        noStroke();
        fill(lerpColor(color(0), color(255), counter));
        ellipse(xpos, ypos, 50, 50);
        counter = counter + 0.01;
    }
}