java - 如何计算我点击嵌套 for 循环网格内部的哪个 "cell"

标签 java grid processing cell

我目前正在尝试获取返回的“单元格”编号,具体取决于我在鼠标单击函数内嵌套 for 循环组成的网格中单击的位置。我已经编写了一个 if 语句来检查是否在整个网格内单击了鼠标,但现在如果我单击左上角的第八个单元格,我希望能够返回数字示例 9。

问题: 将网格中的单元格视为从顶部从 0 开始编号 留给 右下角。 如果单击了某个单元格,您需要确定单击了哪个单元格并返回该单元格编号。您将需要使用整数除法和取模来计算细胞数

我不知道如何解决这个问题。我已经为网格和鼠标单击功能添加了 for 循环函数。

final int COLUMNS = 8;
final int ROWS = 12;

int tileSize = 30;
int ellipseSize = 20;
int ellipseSpacing = 10;
int numMoves;
int selectedCell;
int targetX;
int targetY;
int randomTarget;
int gridX;
int gridY;
int score = 0;
int clickX;
int clickY;

boolean mouseoverColour = false;

void setup(){
  size (700,500);
  background(0);
  //drawTarget();
}

void draw(){
  drawColourgrid();
}

void drawColourgrid(){
   for(int i = 0; i < COLUMNS*tileSize; i+=tileSize){
     for(int j = 0; j < ROWS*tileSize; j+=tileSize){
       noFill();
       stroke(255);
       rect(i + 100,j + 60,tileSize,tileSize);
     }
   }
//fill(255);
//rect(100,60,240,360);
}

void mouseClicked(){
  if(mouseX >= 100 && mouseX <= 340 && mouseY >= 60 && mouseY <= 360){
    mouseoverColour = true;
    clickX = mouseX;
    clickY = mouseY;
    println(clickX, clickY);
  }

}

如何计算像 1 或 2 这样的整数(左上角)? 我尝试使用 mouseX 和 mouseY 但它永远不会保持不变

最佳答案

要计算单元格的行索引和列索引(从 0 开始),您必须计算相对于网格左上角原点的鼠标位置(mouseX - 100mouseY - 60) 并除以单元格的大小:

int col = (mouseX - 100) / tileSize;
int row = (mouseY - 60) / tileSize;

单元格的编号(从1开始)可以计算如下:

int n = row * COLUMNS + col + 1;

mouseClicked 回调可能如下所示:

void mouseClicked(){
    if (mouseX >= 100 && mouseX <= 100+COLUMNS*tileSize && 
        mouseY >= 60 && mouseY <= 60+ROWS*tileSize){
        mouseoverColour = true;

        int col = (mouseX - 100) / tileSize;
        int row = (mouseY - 60) / tileSize;
        int n = row * COLUMNS + col + 1;

        println(n, ":", row, col);
    }
}

关于java - 如何计算我点击嵌套 for 循环网格内部的哪个 "cell",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59001733/

相关文章:

java - 在 JavaFX 中将两个 Spinner 控件绑定(bind)到 TableView 中

java.net.ConnectException : Connection timed out: connect, 使用路由器

javascript - 如何使用 P5js 将 DOM 元素拖入 Canvas 而不离开 Canvas ?

java - 如果用户关闭浏览器,如何自动结束 session

intellij 和 tomcat 上的 java ee maven 项目无法解析为类型

java - 如何通过使用 scala 类扩展我的 java 类使其可写?

c# - 在 WPF 中,有没有办法制作像 Grid 一样具有对齐列的 StackPanel?

具有完整视口(viewport)高度的 CSS 流体网格布局

css - Broken Skeleton 网格 - 12 和 4 列

java - 加工时如何将圆移过线?