我试图让Mosaic
在重复循环中添加红色,然后是绿色,然后是蓝色,直到颜色为白色,a.k.a。(r/g/b/ >= 255)
。
我写过各种if语句,因为我相信这是我正在寻找的循环。我已经到了停止点。问题是循环一直循环变为白色,然后保持蓝色(重置红色,我假设它是蓝色,而不是洋红色)。我假设这是因为在while(Mosaic.isOpen())
例程中的main()
循环中重新循环后,循环永远不会变为蓝色。另一个版本(我以后发布的那个,其中我已经被难倒了。)反复添加然后重置蓝色(我相信,因为它循环变为黄色,然后重置为绿色。)。
这是由main()
例程运行并重新运行的for循环。
static void colorChange(int x,int y) {
int red = Mosaic.getRed(x,y);
int green = Mosaic.getGreen(x,y);
int blue = Mosaic.getBlue(x,y);
if (red <= green || red <= blue) {
if (red <= 240) {
Mosaic.setColor(x, y, red + 6, green, blue);
} else {
Mosaic.setColor(x, y, 0, green, blue);
} //
} else if (green <= blue || green <= red) {
if (green <= 240) {
Mosaic.setColor(x, y, red, green + 6, blue);
} else {
Mosaic.setColor(x,y,red,0,blue);
} //
} else if (blue <= red && blue <= green) {
if (blue <= 240) {
Mosaic.setColor(x, y, red, green, blue + 6);
} else {
Mosaic.setColor(x, y, red, green, 0);
} //
}
任何人都可以看到我可能会失踪的东西吗?如果以前没有清除,我想添加红色,然后是下一个周期(因为红色应该大于绿色)它应该添加绿色,然后用蓝色相同,直到最后重置值时#&# 39;重新开始。
向我发送评论或发送电子邮件至philecarpenter@gmail.com
。
答案 0 :(得分:0)
boolean redSmallerGreen = (red <= green);
boolean greenSmallerBlue = (green <= blue);
//What happens here?!
boolean allGreater240 = (red >= 240 && blue >= 240 && green >= 240);
if (redSmallerGreen) {
Mosaic.setColor(x, y, red<=240?red+6:0,green,blue);
} else if (greenSmallerBlue) {
Mosaic.setColor(x, y, red,green<=240?green+6:0,blue);
} else if (allgreater240) {
//?!
} else {
Mosaic.setColor(x, y, red,green,blue<=240?blue+6:0);
}
会发生什么?在某些时候,红色,绿色和蓝色都将更大240.现在蓝色将重置为0并再次增加到240,而红色和绿色保持不变。 也许这可以帮助您解决问题。我会有一个评论,但它本来是不可读的。
我没有测试我的代码,只是把它写下来想象你/我在这里做了什么:)
编辑:反向
int step = 6;
public void yourFunction() {
(...)
boolean redSmallerGreen = (red <= green);
boolean greenSmallerBlue = (green <= blue);
boolean allSmaller0 = (red <= 0 && blue <= 0 && green <= 0);
boolean allGreater240 = (red >= 240 && blue >= 240 && green >= 240);
if (allSmaller0) {
step = 6;
}
if (allGreater240) {
step = -6;
}
if (redSmallerGreen) {
Mosaic.setColor(x, y, red+step,green,blue);
} else if (greenSmallerBlue) {
Mosaic.setColor(x, y, red,green+step,blue);
} else {
Mosaic.setColor(x, y, red,green,blue+step);
}
}