我做了一个区块栏
但是当前的功能只能选中一个格子
但是当前的功能只能选中一个格子
他看起来就是这样的
int rx = tileClickStartX < tileClickEndX ? tileClickStartX : tileClickEndX;
int ry = tileClickStartY < tileClickEndY ? tileClickStartY : tileClickEndY;
int rw = Math.Abs(tileClickStartX - tileClickEndX);
int rh = Math.Abs(tileClickStartY - tileClickEndY);
tileClickingRect = new Rectangle(rx,ry,rw,rh);
同时后台我也将数据简化了
简化到了 一个矩阵的起点坐标 和 结束坐标
简化到了 一个矩阵的起点坐标 和 结束坐标
问题似乎得到了一定的解决
那么新的问题来了 我在后台的图片 是一个一维的数组储存的 那么如何 又有哪些编号被选中呢?
如果用视觉去数的话 很直观
但是用代码我们得换一下思维去想如何处理这种数学转化
我们可以知道 10 对应的坐标是 2 , 1
x = 2
y = 1
而 一列(c) = 8
所以对应公式就是 y * c + x
相同的 47 的坐标分别是 x7y5
5 * c(8) + 7 = 47
现在我们知道了 格子的编号 与其坐标的对应关系
那么我们先来看看第一列
也就是 编号10 ~ 15
的变化
他们的Y坐标没啥变化
那么 推导一下
y * c + x
1 * 8 + (2~7)
2~7 是连续的数字 所以我们如果用一个 for循环 (int x = 2 ; x<= 7 ;x++) 就可以解决 10~15的编号了
那么 推导一下
y * c + x
1 * 8 + (2~7)
2~7 是连续的数字 所以我们如果用一个 for循环 (int x = 2 ; x<= 7 ;x++) 就可以解决 10~15的编号了
那么我们再来看一下 10 18 26 34 42 这一列
也就是粉色的这一列
他们的 x坐标都没变
也就是说 y是一个变量
y * 8 + 2
而y 的范围是 1 ~ 5
(1~5) * 8 +2 结果就是粉色这一列的编号
他们的 x坐标都没变
也就是说 y是一个变量
y * 8 + 2
而y 的范围是 1 ~ 5
(1~5) * 8 +2 结果就是粉色这一列的编号
for(int y = StartY ;y<=EndY;y++)
{
for(int x = StartX;x<=EndX;x++)
{
int index = y * column + x;
}
}