我正在为一所大学项目工作。我最近才开始学习编码,非常感谢我能得到的任何帮助。我正在使用处理并导入了以下库:xlsReader& ControlP5。我创建了一个被绘制了7次的对象。
我首次尝试使用7种特定颜色为7个重复对象着色对象,可以在下面的代码中看到。我仍然试图解决这个问题,但目前我的对象只是读取数组的最后一种颜色。如果有人能给我一些建议或提供与使用阵列不同的解决方案,我将非常感激。
我的编码如下:
if (showData == true) {
for (int row = 0; row < 6; row++) {
xPinBusiness = reader.getInt(row+1, col);
int xPin1 = int(map(xPinBusiness, 0, 3000, amountsStart, amountsEnd));
color[] myColors = new color[7];
myColors[0] = color(208, 102, 155);
myColors[1] = color(64, 161, 177);
myColors[2] = color(99, 153, 98);
myColors[3] = color(101, 102, 156);
myColors[4] = color(255, 204, 87);
myColors[5] = color(255, 154, 22);
myColors[6] = color(255, 53, 41);
for (int colorRange = 0; colorRange < myColors.length; colorRange+=1){
pin1.display(myColors[colorRange], xPin1, 295, 20);
}
}
}
答案 0 :(得分:3)
问题是draw()
函数会通过您的for loop
,然后使用最终结果作为color
的值,这是数组中的最后一个值,作为{ {1}}它传递给你的函数。换句话说,当color
运行时,您的GUI基本上是冻结或已锁定,因此中间值,即使它们被认为是在循环内部,也不会对屏幕上绘制的内容有任何影响。
通过删除循环并执行类似下面的示例代码(我在此示例中使用了for loop
数组)来简化draw()
函数:
colors
有助于记住int colorCounter;
void setup()
{
// slowed down the frameRate so you can see the effect of colors changing.
frameRate(5);
colorCounter = 0;
}
void draw()
{
color[] myColors = new color[7];
myColors[0] = color(208, 102, 155);
myColors[1] = color(64, 161, 177);
myColors[2] = color(99, 153, 98);
myColors[3] = color(101, 102, 156);
myColors[4] = color(255, 204, 87);
myColors[5] = color(255, 154, 22);
myColors[6] = color(255, 53, 41);
fill(myColors[colorCounter]);
ellipse(50, 50, 50, 50);
println(colorCounter);
// using % to wrap around and avoid NPE
colorCounter = (colorCounter + 1) % myColors.length;
}
本身是一个无限循环,所以不需要在其中添加其他循环。如果您认为需要在draw()
内部进行循环,那么您需要重新考虑您的策略,因为在大多数情况下,您可以创建一个计数器,例如本例中的draw()
,并使用它在colorCounter
函数中控制你想要控制的任何内容。