2014-11-08 90 views
0

我创建了一个名为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坐标。现在我们得到了一个Cells的网格。 当我触摸屏幕时,我知道我触摸屏幕时的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坐标一样的东西。

当我点击第一行的单元格,第一行的第一个元素被选中时,它将不起作用。当在第五行中的元素上点击时,第五行中的第五个元素被选中,尽管我已经按下了另一个单元格。

下面是截图enter image description here

我找不到我的错误,有什么建议?在此先感谢

+1

'如何isTouched()'获取调用? – gla3dr 2014-11-08 18:39:55

+0

再次通过两个forloops,在每个单元格中调用isTouched – user2410644 2014-11-08 18:41:06

回答

3

计算包含触摸点的单元格会更有效,更容易。

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个细胞的阵列中,由于Ĵ将由0索引cell[i][j] == cell[i][0]无论何时相乘什么j。

cells = new Cell[9][9];