在处理3中创建可单击的网格

时间:2018-11-02 13:57:38

标签: java arrays for-loop multidimensional-array processing

我正在尝试制作一个正方形的方格,以在单击时更改其填充(从黑色变为白色,反之亦然)。我目前可以打开或关闭整个网格,但无法弄清楚如何指定当鼠标在其边界内单击时应切换哪个特定的正方形。我之前使用mouseX和mouseY坐标创建了按钮,但是它们是针对可以手动调整的特定对象的。我不知道如何使用for循环和数组来做到这一点。

有人告诉我创建一个布尔数组并将该数组的值传递给grid数组,但是同样,我也不知道如何指定它需要去数组的哪一部分。例如,如何在mousePressed上更改正方形[6] [3]的填充值?

到目前为止,这是我的代码:

int size = 100;
int cols = 8;
int rows = 5;
boolean light = false;
int a;
int b;

void setup() { 
  size (800, 600);
  background (0);
}

void draw() {
}

void mousePressed() {
  light = !light;

  int[][] box = new int[cols][rows];
  for (int i = 0; i < cols; i++) {
    for (int j = 0; j < rows; j++) {
      box[i][j] = i;
      int a = i*100;
      int b = j*100;


      if (light == true) {
        fill(255);
      } else {
        fill(0);
      }
      rect(a, b, 100, 100);

      println(i, j);
    }
  }
}

1 个答案:

答案 0 :(得分:0)

首先,每当您按下鼠标时,您正在重新创建整个电路板。您必须在两次鼠标单击之间保留该信息,因此使box与其他变量一起成为全局数组。此外,只要您关心的只是每个正方形的开/关状态,就可以将其设置为boolean数组:

boolean[][] isSquareLight = new boolean[cols][rows];

代替

if (light == true) {

然后您应该只检查

if (isSquareLight[i][j] == true) {

(请注意== true是多余的)。

现在,您已经编写了可以找到每个框的坐标的代码:您正在将其传递给rect

rect(a, b, 100, 100);

剩下要做的就是检查鼠标是否在此矩形内,即mouseX是否在aa+100之间(和mouseY类似)-如果是这种情况,则用户单击当前(ij)给出的框,这样您就可以取反isSquareLight[i][j](在像上面一样检查之前),它将工作。

有多种方法可以计算出该值而不必每次都遍历整个网格,但是也许以上内容可以帮助您自己找到路径,而不仅仅是为您编写代码。

PS:顶部的int a; int b;无任何作用,可以将其删除。您在函数中使用了局部变量ab,这是正确的。