[转] 45度斜角编辑器制作教程(二)

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);
                }

你可能感兴趣的:(PHP,bbs)