处理对象上的 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;
}
}
您的代码中存在一些问题:
counter
是全局的。所以每笔刷共享同一个计数器,也就是说:
1-1。所有 ellipse
的颜色都相同,
1-2。 counter = counter + 0.01
正在对同一个变量进行计算,使其消失得非常快。
color
和tempC
在Brush
中有点模棱两可。 class 变量 tempC
已声明但未使用,而您将另一个 tempC
作为参数。
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;
}
}
我目前正在创建一种带有处理的绘图工具,其中用鼠标指针绘制黑色椭圆,一段时间后完全消失为白色 - 即不再可见。整个东西看起来像是一种手指压力传感器……我已经有了第一个可以找到的方法 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;
}
}
您的代码中存在一些问题:
counter
是全局的。所以每笔刷共享同一个计数器,也就是说:
1-1。所有 ellipse
的颜色都相同,
1-2。 counter = counter + 0.01
正在对同一个变量进行计算,使其消失得非常快。
color
和tempC
在Brush
中有点模棱两可。 class 变量tempC
已声明但未使用,而您将另一个tempC
作为参数。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;
}
}