[转] 45渡斜角编辑器制作教程(二)
[转] 45度斜角编辑器制作教程(二)
http://bbs.9ria.com/viewthread.php?tid=74117&extra=page%3D1%26amp%3Borderby%3Ddateline%26amp%3Bfilter%3D2592000
地图编辑器都有一个经典的功能--组件拖放,实现类似功能的核心就是对鼠标所在区域(斜角UV坐标系)的判断。需要把x,y坐标转换成U,V坐标,
教程一里推导出了如下公式
解方程可得
上式求出来的可能是带小数值(也就是点在菱形区域内)
我们想求的是离该点最近的左侧UV点,那么
把上面公式封装起来,如下
http://bbs.9ria.com/viewthread.php?tid=74117&extra=page%3D1%26amp%3Borderby%3Ddateline%26amp%3Bfilter%3D2592000
地图编辑器都有一个经典的功能--组件拖放,实现类似功能的核心就是对鼠标所在区域(斜角UV坐标系)的判断。需要把x,y坐标转换成U,V坐标,
教程一里推导出了如下公式
var _x:Number = org_x + _tw/2 * (_u + _v); var _y:Number = org_y + _th/2 * (_v - _u);
解方程可得
_u = (_x - org_x)/_tw - (_y - org_y)/_th; _v = (_x - org_x)/_tw + (_y - org_y)/_th;
上式求出来的可能是带小数值(也就是点在菱形区域内)
我们想求的是离该点最近的左侧UV点,那么
var _u:int = Math.floor((_x - org_x)/_tw - (_y - org_y)/_th); var _v:int = Math.floor((_x - org_x)/_tw + (_y - org_y)/_th);
把上面公式封装起来,如下
/** * 获取UV点坐标 * @param _x x坐标 * @param _y y坐标 * @param _tw 网格宽 * @param _th 网格高 * @param _count U向网格数量 * @return * */ public static function get_UV_Point(_x:Number,_y:Number,_tw:int,_th:int,_count:int):Point { var org_x:Number = 0; var org_y:Number = _count * _th/2; var _u:int = Math.floor((_x - org_x)/_tw - (_y - org_y)/_th); var _v:int = Math.floor((_x - org_x)/_tw + (_y - org_y)/_th); return new Point(_u,_v); }