我是处理方面的新编码员,因此,请保持谨慎。通常我的代码会更长,更复杂,但是我为您编写了一个简单的代码,我可以根据自己的代码进行调整:
int speed = 1;
int x, z = 50;
void setup() {
size(400, 400, P3D);
}
void draw() {
background(0);
noStroke();
lights();
translate(x, height/2, z);
fill(255,0,0);
sphere(25);
if (x > width -50)
noLoop();
x += speed;
}
所以,就像您看到的那样,球体以红色开始,并到达窗口的末端。我想将其颜色从红色更改为白色,这需要30秒。到达窗口的尽头。但是我不知道如何。如果您能帮助我,我会很高兴。注意:我尝试了lerpColor函数,但没有帮助我。
我认为类似的方法会起作用:
int r=255,b=255,g=255;
...
void draw(){
...
int percent=x/width*100;
fill(r,b*percent,g*percent)
sphere(25)
...
}
所以该球体仅在屏幕左侧为红色,而在右侧为白色
数学是秘密。经常是。
要完成此操作,您需要跟踪几件事:穿过屏幕所需的时间(您说的是30秒),球的速度,颜色的变化速度。
[开始之前,我建议您将float
用于位置和速度的变量。整数将完成这项工作,但是在某些时候,当您需要精度时,您可能会后悔没有使用浮点数或类似类型。
有两种方法来处理随时间变化的变化:您可以计算时间并在需要的地方绘制需要绘制的内容,或者计算在一定时间内绘制多少帧并相应地移动内容。第一种技术的优点是即使系统比较落后也能够将其绘制在原本应该放置的位置(如果无法遵守,处理会降低帧速率),而第二种技术通常更易于使用。我们将采用帧速率技术,因为这并不复杂,并且因为大多数程序不需要太多资源,因此会降低帧速率。
[处理中,帧速率也是主循环(draw()
循环)运行的速率。因此,我们将选择一个帧速率,该帧速率将使我们能够计算球体的速度和颜色变化的速度。其余的只是看着它移动。
这是您的示例,但已进行了修改,因此大致可以按照您说的进行:
float speed;
float x, z = 50;
float greenBlueStrength = 0;
float colorFadeRate = 1;
int fadeTimeInFrames;
void setup() {
size(400, 400, P3D);
frameRate(60); // 60 is the default framerate per second
// so 30 seconds == (30*60) == 1800 frames
// so you must have the speed to match
fadeTimeInFrames = 60 * 30;
speed = (width - 50) / (float)fadeTimeInFrames;
colorFadeRate = 255 / (float)fadeTimeInFrames;
println(colorFadeRate);
}
void draw() {
background(0);
textSize(30);
text((millis()/1000) + " s. // color: " + (int)greenBlueStrength, 20, 50);
// this is just to keep track of changes while they happen
noStroke();
lights();
translate(x, height/2, z);
fill(255, greenBlueStrength, greenBlueStrength);
sphere(25);
if (x > width -50) {
noLoop();
} // no actual change, but use brackets anyway, it's easier to read
// updating what needs to be updated
x += speed;
greenBlueStrength += colorFadeRate;
}
我会流连忘返,如果您有任何疑问,请不要犹豫。
玩得开心!