博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

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

Posted on 2009-06-04 03:24  月光林地  阅读(2274)  评论(1编辑  收藏  举报
比如我们要做一个地图编辑器,

 

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

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

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