我创建了一个名为 Cell 的对象网格。每个单元格都有以下属性:
x coordinate
y coordinate
width
height
单元格的宽度等于它的高度。每个单元格都有相同的宽度/高度。 有 9*9 个单元格,一个挨着一个,由这个算法创建:
cells = new Cell[9][0];
for(int i = 0; i < 9; i++) {
for(int j = 0; j < 9; j++) {
cells[i][j] = new Cell(i*cellWidth, j*cellHeight);
}
}
单元格的构造函数要求提供 x 和 y 坐标。现在我们得到了一个单元格网格。 当我触摸屏幕时,我知道触摸屏幕的 x 和 y 坐标。我触摸的这个单元格应该运行一个名为 isTouched 的方法。
我怎样才能知道我触摸了哪个单元格?
我试过这个算法:
public boolean isTouched(int zx, int zy) {
if((zx >= x && zx <= x+cellSize) && (zy >= y && zy <= y+cellSize)) {
return true;
}else {
return false;
}
}
zx 和 zy 是触摸坐标。它检查触摸的 x 轴是否大于或等于单元格自己的 x 坐标,以及它是否小于单元格的 x 坐标 + 单元格的宽度。与 y 坐标相同。
它不会工作,因为当我点击第一行的单元格时,第一行中的第一个元素被选中。当点击第五行中的一个元素时,第五行中的第五个元素被选中,尽管我按下了另一个单元格。
这是一个截图
我找不到我的错误,有什么建议吗?提前致谢
最佳答案
计算包含触摸点的单元格会更高效、更容易。
Cell touchedCell(int x, int y) {
i = x / cellWidth;
j = y / cellHeight;
if (i >= 9 || j >= 9 || i < 0 || j < 0)
return null;
else
return cell[i][j];
}
数组大小也关闭了:
cells = new Cell[9][0];
这是导致奇怪效果的原因,因为数组中只有 9 个单元格,因为索引时 j 将乘以 0 cell[i][j] == cell[i][0]
不管 j.
应该是
cells = new Cell[9][9];
关于java - 获取点击的数组项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26820647/