use*_*950 6 java rgb loops colors
我试图以彩虹顺序遍历所有rgb颜色.目前我有这个:
int state = 1;
int a = 255;
int r = 255;
int g = 0;
int b = 0;
if(g < 255 && state == 1){
g++;
r--;
if(g == 255)
state = 2;
}
if(b < 255 && state == 2){
b++;
g--;
if(b == 255)
state = 3;
}
if(state == 3){
r++;
b--;
if(b == 0)
state = 1;
}
int hex = (a << 24) + (r << 16) + (g << 8) + (b);
Run Code Online (Sandbox Code Playgroud)
它的工作原理但它似乎没有得到所有的颜色.我知道这可能是一种不好的做法,是的,我知道我可以在彼此内部做3个循环,但有没有人知道更好的方法来做到这一点,获得所有的颜色?
另外,我没有使用3个循环的原因是因为它需要在每个新的RGB组合之后更新,而不是在循环结束之后更新,因为每次都给我相同的结果.
编辑:感谢pbabcdefp我得到了它的工作,解决方案如下.
int state = 0;
int a = 255;
int r = 255;
int g = 0;
int b = 0;
if(state == 0){
g++;
if(g == 255)
state = 1;
}
if(state == 1){
r--;
if(r == 0)
state = 2;
}
if(state == 2){
b++;
if(b == 255)
state = 3;
}
if(state == 3){
g--;
if(g == 0)
state = 4;
}
if(state == 4){
r++;
if(r == 255)
state = 5;
}
if(state == 5){
b--;
if(b == 0)
state = 0;
}
int hex = (a << 24) + (r << 16) + (g << 8) + (b);
Run Code Online (Sandbox Code Playgroud)
您需要找到所有组合。您的代码的问题在于,在一个循环中您修改了两个值。在这种情况下,您会跳过一种颜色。例如,G=100 且 R=100:
g++; r--; 在此行之后,G 将是 101,R 将是 99。下次将是 G102,R98 您现在获得了三种组合:
[g100,r100],g[101,r99],g[102,r98]。
但是这里您错过了许多其他组合,例如 [g100,r99] 和 g[101,r100] 或 g[101,r98] 等。