[转] 45度斜角编辑器制作教程(二)
程序员文章站
2022-05-08 17:58:13
...
[url]http://bbs.9ria.com/viewthread.php?tid=74117&extra=page%3D1%26amp%3Borderby%3Ddateline%26amp%3Bfilter%3D2592000[/url]
地图编辑器都有一个经典的功能--组件拖放,实现类似功能的核心就是对鼠标所在区域(斜角UV坐标系)的判断。需要把x,y坐标转换成U,V坐标,
教程一里推导出了如下公式
解方程可得
上式求出来的可能是带小数值(也就是点在菱形区域内)
我们想求的是离该点最近的左侧UV点,那么
把上面公式封装起来,如下
地图编辑器都有一个经典的功能--组件拖放,实现类似功能的核心就是对鼠标所在区域(斜角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);
}
推荐阅读