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

[url]http://bbs.9ria.com/viewthread.php?tid=74117&extra=page%3D1%26amp%3Borderby%3Ddateline%26amp%3Bfilter%3D2592000[/url]

地图编辑器都有一个经典的功能--组件拖放,实现类似功能的核心就是对鼠标所在区域(斜角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);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值