我目前正在创建一种带有处理功能的绘图工具,其中用鼠标指针绘制黑色椭圆,一段时间后完全消失为白色——即不再可见。整个东西看起来像一种手指压力传感器…我已经有了第一种方法,可以在这里找到。在第二种方法中(参见下面的代码),我使用了一个与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-2。计数器=计数器0.01
正在对同一个变量进行计算,使其超快消失。
颜色
和temC
在Brush
中有点模棱两可。类变量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;
}
}