Java 处理-彩色循环
我正在尝试创建一个窗口,当您单击该窗口时,将发生颜色变化循环: 代码:Java 处理-彩色循环,java,colors,processing,rgb,Java,Colors,Processing,Rgb,我正在尝试创建一个窗口,当您单击该窗口时,将发生颜色变化循环: 代码: package declaringvariables; 导入处理.core.PApplet; 公共类DeclaringVariables扩展了PApplet{ 公共作废设置(){ 宽度=800; 高度=600; 尺寸(宽度、高度); } 布尔向下=假; 浮点数R=255; 浮点数G=255; 浮动B=0; 浮动增量o=+1; float mincol=0,maxcol=255; 公众抽签(){ 背景(1255,1); 如果(
package declaringvariables;
导入处理.core.PApplet;
公共类DeclaringVariables扩展了PApplet{
公共作废设置(){
宽度=800;
高度=600;
尺寸(宽度、高度);
}
布尔向下=假;
浮点数R=255;
浮点数G=255;
浮动B=0;
浮动增量o=+1;
float mincol=0,maxcol=255;
公众抽签(){
背景(1255,1);
如果(向下){
println(“\nFramecount:+frameCount”);
println(“当前帧速率为:“+帧速率”);
背景(R、G、B);
R+=增量o;
如果(R>maxcol)递增o=-1;
否则,如果(R>mincol)incremento=random(2);
B+=增量o;
如果(B>maxcol)递增o=-1;
如果(Bmaxcol)递增o=-1;
如果(G
由于它现在可以正常工作,我点击它开始改变颜色,直到它变成绿色(1255,1)RGB,然后停止。我需要它循环,所以它是一个不断变化的背景
我想做一些“如果声明”,当背景变成绿色时,它会重置背景。还协调了一个while循环,但它同时降低了我的帧速率,使它无法工作
在这行的末尾,我希望我的if(down=true)语句在单击后重复它
提前谢谢:)首先:如果(down=true),你真的是说
?这将为down分配true,而不是仅测试是否为true。我建议您改用if(down)
为了循环颜色,可以使用模(%)。这样,一旦超过255,就可以从0开始。除了主颜色插值问题之外,没有什么可以改进的地方:
调用大小(800600)在调用size()
之前,code>比直接访问width,height
更好(这在幕后做了很多事情)
您可以在setup()
中设置一次帧速率,而不是在draw()
如果值的行为不符合预期,最好将其打印到控制台或在屏幕上显示,以便观察它们的行为
与您的问题密切相关:
您对3个值使用单个增量,但希望3个值独立增量:您应该使用3个增量变量来保持每个颜色通道值独立
在将增量应用于颜色通道之前,应检查并调整增量
以下是上述代码中的三点:
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;
}
公共作废设置(){
规模(800600);
}
布尔向下=假;
浮点数R=255;
浮点数G=255;
浮动B=0;
浮动增量=+1;
浮点增量OG=+1;
浮动增量OB=+1;
float mincol=0,maxcol=255;
公众抽签(){
背景(1255,1);
如果(向下){
println(“\nFramecount:+frameCount”);
println(“当前帧速率为:“+帧速率”);
背景(R、G、B);
R+=增量;
如果(R>maxcol)incrementoR=-1;
否则,如果(R>mincol)incrementoR=random(2);
B+=递增OB;
如果(B>maxcol)递增og=-1;
否则,如果(Bmaxcol)递增ob=-1;
如果(G
您会注意到值很快就超出了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;
}
公共作废设置(){
规模(800600);
帧率(150);
}
布尔向下=假;
浮点数R=255;
浮点数G=255;
浮动B=0;
浮动增量=+1;
浮点增量OG=+1;
浮动增量OB=+1;
float mincol=0,maxcol=255;
公众抽签(){
背景(1255,1);
如果(向下){
//在应用增量之前更新增量
如果(R>maxcol)incrementoR=-1;
如果(Rmaxcol)递增og=-1;
如果(Gmaxcol)递增ob=-1;
如果(B
如果你想更多地使用颜色,你也应该结账,而且它们很有趣。如果在origin使用(向下),在代码中乱搞后忘记放回原处。我不确定if(down)中的代码在做什么/应该做什么。你能详细说明一下吗?当点击窗口时,我的背景会平滑地改变颜色。因此,代码正在检查R/G/B是否高于/低于我的最大和最小颜色。然后它会调整。创建一个平滑的过渡。所以我试着在这个问题上做一些修改,你想让我创建一个名为next的新空白,还是我误解了。是的,这样你就不会把所有东西都放在一个方法中(draw)。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;
}