使用颜色数组为重复对象着色

时间:2014-05-11 13:42:22

标签: arrays object colors processing

我正在为一所大学项目工作。我最近才开始学习编码,非常感谢我能得到的任何帮助。我正在使用处理并导入了以下库: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);


    }
  }
}

1 个答案:

答案 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函数中控制你想要控制的任何内容。