Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 处理-彩色循环_Java_Colors_Processing_Rgb - Fatal编程技术网

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;
    }