我试图创建一个窗口,当你点击一次时会发生一个变色循环:
代码:
package declaringvariables;
import processing.core.PApplet;
public class DeclaringVariables extends PApplet {
public void setup() {
width = 800;
height = 600;
size(width,height);
}
boolean down = false;
float R = 255;
float G = 255;
float B = 0;
float incremento = +1;
float mincol = 0, maxcol = 255;
public void draw() {
background (1,255,1);
if(down) {
println("\nFramecount: "+frameCount);
println("The current framerate is: "+frameRate);
background(R,G,B);
R += incremento;
if (R > maxcol) incremento = -1;
else if (R > mincol) incremento = random(2);
B += incremento;
if (B > maxcol) incremento = -1;
else if (B < mincol) incremento = +5;
G += incremento;
if (G > maxcol) incremento = -1;
else if (G < mincol) incremento = +10;
frameRate(150);
}
}
public void mousePressed() {
down = true;
}
}
因为它现在有点工作,我点击它开始改变颜色,直到它变为绿色(1,255,1)RGB,然后它停止。我需要它循环,所以它是一个不断变化的背景。
我想过制作某种&#34; if语句&#34;,当它变成绿色时重置背景。还有一个while循环,但它都降低了我的帧率并且没有使它工作。
行结束时,我希望我的if(down = true)语句在单击后重复自我。
提前谢谢你:)
答案 0 :(得分:1)
首先:你真的是指if(down = true)
吗?这将指定true为down,而不仅仅测试它是否为true。我建议你改用if(down)
。
为了循环颜色,您可以使用模数(%)。这样,一旦你超过255,就从0开始。
答案 1 :(得分:0)
除了主要的颜色插值问题外,很少有东西可以改进:
size(800,600);
之前调用width,height
更好,而不是直接访问size()
(在幕后做了很多事情)setup()
中设置一次frameRate,而不是在draw()
与您的问题相关的更紧密:
以下是代码中的三点:
public void setup() {
size(800,600);
}
boolean down = false;
float R = 255;
float G = 255;
float B = 0;
float incrementoR = +1;
float incrementoG = +1;
float incrementoB = +1;
float mincol = 0, maxcol = 255;
public void draw() {
background (1,255,1);
if(down) {
println("\nFramecount: "+frameCount);
println("The current framerate is: "+frameRate);
background(R,G,B);
R += incrementoR;
if (R > maxcol) incrementoR = -1;
else if (R > mincol) incrementoR = random(2);
B += incrementoB;
if (B > maxcol) incrementoG = -1;
else if (B < mincol) incrementoG = +5;
G += incrementoG;
if (G > maxcol) incrementoB = -1;
else if (G < mincol) incrementoB = +10;
frameRate(150);
}
fill(127);
text("R:"+(int)R+"\tG:"+(int)G+"\tB:"+(int)B,15,15);
}
public void mousePressed() {
down = true;
}
您会注意到值超出0-255范围的速度非常快。 这是调整的代码,首先更新增量,然后是值。 此外,这是在绘制之前完成的,否则您将始终绘制先前的R,G,B值:
public void setup() {
size(800,600);
frameRate(150);
}
boolean down = false;
float R = 255;
float G = 255;
float B = 0;
float incrementoR = +1;
float incrementoG = +1;
float incrementoB = +1;
float mincol = 0, maxcol = 255;
public void draw() {
background (1,255,1);
if(down) {
//update increments prior to applying them
if(R > maxcol) incrementoR = -1;
if(R < mincol) incrementoR = random(2);
if(G > maxcol) incrementoG = -1;
if(G < mincol) incrementoG = +5;
if(B > maxcol) incrementoB = -1;
if(B < mincol) incrementoB = +10;
//apply increments
R += incrementoR;
G += incrementoG;
B += incrementoB;
println("\nFramecount: "+frameCount);
println("The current framerate is: "+frameRate);
background(R,G,B);
}
fill(127);
text("R:"+(int)R+"\tG:"+(int)G+"\tB:"+(int)B,15,15);
}
public void mousePressed() {
down = true;
}
如果你想更多地玩颜色,你还应该结帐lerpColor()和colorMode(),玩起来很有趣。