提问者:小点点

具有处理功能的对象上的lerpColor


我目前正在创建一种带有处理功能的绘图工具,其中用鼠标指针绘制黑色椭圆,一段时间后完全消失为白色——即不再可见。整个东西看起来像一种手指压力传感器…我已经有了第一种方法,可以在这里找到。在第二种方法中(参见下面的代码),我使用了一个与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个答案

匿名用户

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

  1. 计数器是全局的。所以每一笔都共享同一个计数器,这意味着:

1-1。所有椭圆都将具有相同的颜色,

1-2。计数器=计数器0.01正在对同一个变量进行计算,使其超快消失。

颜色temCBrush中有点模棱两可。类变量temC已声明但未使用,而您将另一个temC作为参数。

Brush. show中c的值

我在下面修复了这些问题:

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