比如我们要做一个地图编辑器,
那么如何判断鼠标点中了哪一个碎片呢??如图:
也许你想到通过解两个直线方程(点斜式):
不过这是个苯办法,那么怎么算呢?
开门见山:
***********************************
N=int(x/TileW - y/TileH)
M=int(x/TileW + y/TileH)
***********************************
N,M是碎片的索引,从0开始。
TileW,TileH是碎片的长宽。
x,y是鼠标坐标,但是注意坐标系原点。
以上如图:
在自己的代码中直接使用,发现这个公式有错误,当索引为负数时,直接计算会有1的误差,改正后的公式:
Code
反过来,由M,N索引计算出当前地图块的外围矩形左上角顶点坐标的步骤:
nScreenPosX = (nMIndex + nNIndex) * TILEWIDTH/2 + OrgPos.x;
nScreenPosY = (nMIndex - nNIndex) * TILEHEIGHT/2 - TILEHEIGHT/2 + OrgPos.y;
nScreenPosY = (nMIndex - nNIndex) * TILEHEIGHT/2 - TILEHEIGHT/2 + OrgPos.y;