45度斜角地图编辑器鼠标坐标的转换

比如我们要做一个地图编辑器,

 

那么如何判断鼠标点中了哪一个碎片呢??如图:

也许你想到通过解两个直线方程(点斜式):

不过这是个苯办法,那么怎么算呢?
开门见山:
***********************************
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;


 

你可能感兴趣的:(编辑器)