在for循环的对象上使用fill()

时间:2015-10-13 21:27:38

标签: object for-loop processing fill processing.js

我在Processing(JavaScript)中创建一个游戏,它允许您在矩形网格逐个突出显示时为其设置颜色。

我尝试使用for循环和fill()函数为对象数组着色,但是当我使用它时,它不仅会为数组中的当前矩形着色(这是正确的),还有以前所有的矩形。我希望它只为当前矩形着色。

void setup () {
  size (1200, 700);
  background (255, 255, 255);
  smooth();
  rect = new Rectangle [count]; //creates a grid of possible rectangles, based on the dimensions of the screen
  for (int i = 0; i<= (count-1); i++) {
    fill (255, 255, 255);
    ypos = ypos + heigh;
    if (ypos >= 700) {
      ypos = 0;
      xpos = xpos + wid;
    }
    rect[i] = new Rectangle(xpos, ypos, wid, heigh, redPressed, greenPressed, yellowPressed, bluePressed, blackPressed);
  }
  int now = millis();
}

void draw() {
  for (int i = 0; i < control; i++) {
    if (keyPressed) { //detects if key is pressed and colors the current rectangle that way
      if (key == 'r' ||key == 'R') {
        fill (255, 0, 0);
      }
      if (key == 'g' ||key == 'G') {
        fill (0, 255, 0);
      }
      if (key == 'y' || key == 'Y') {
        fill (255, 255, 0);
      }
      if (key == 'b' || key == 'B') {
        fill (0, 0, 255);
      }
      if (key == 'k' || key == 'K') {
        fill (0, 0, 0);
      }
    }
    stroke (0, 0, 0);
    rect (rect[i].xpos, rect[i].ypos, rect[i].xdim, rect[i].ydim); //draws the current rectangle, moving through the grid
  }
  if (millis() - now >= wait) { //causes a 1 second delay between rectangles
    now = millis();
    control++;
    if (control > (count-1)) {
      control = (count-1);
      i = 0;
    }
  }
}

提前致谢!

1 个答案:

答案 0 :(得分:1)

首先,我们无法运行此代码,因为您尚未发布Rectangle课程或control,'count','xpos','ypos',{{1 }},widheighredPressedgreenPressedyellowPressedbluePressed变量。变量。如果您需要帮助,则必须发布我们实际可以运行的MCVE

其次,你在这里做了一些奇怪的事情:如果你只想一次绘制其中一个,为什么要循环遍历blackPressed数组呢?为什么要手动导致等待而不是仅设置帧速率?

每次调用Rectangle时,不要循环遍历矩形,而是跟踪索引并直接访问它。而不是自己等待,只需设置帧速率:

draw()

请努力下次发布MCVE。