动态“修改”注册点,实现任意点旋转
/**
*
* *------------------------------------------*
* | *** 动态“修改”注册点,实现任意点旋转*** |
* *------------------------------------------*
*
* 编辑修改收录:fengzi(疯子、wu341、wgq341)
*
* 不会写代码,我是代码搬运工。
*
* 联系方式:QQ(493712833)。
*
* 随 笔: https://www.cnblogs.com/fengziwu/
*
* 版权协议:请自觉遵守LGPL协议,欢迎修改、复制、转载、传播给更多需要的人。
* 免责声明:任何因使用此软件导致的纠纷与软件/程序开发者无关。
* 日 期: 2020.03.25
*
* * ------------------ Example -------------------- *
* PointRegister.register(mc,new Point(100,50));
PointRegister.rotate(mc,60)
* 需要注意的点..使用register注册新的点时..是当前的状态为去注册旋转点,
* 就是说如果当前mc已经转了一定的角度..重新注册旋转点..与没旋转过的mc注册旋转点时位置会不一样..
* 这里是需要注册的地方..
*/
package fengzi.util
{
import flash.display.DisplayObject;
import flash.geom.Point;
import flash.utils.Dictionary;
public class PointRegister
{
static private var _target:Dictionary;
public function PointRegister()
{
}
/**
* 注册旋转点36
* @param target 目标
* @param point 新注册点39
*/
static public function register(target:DisplayObject, point:Point):void
{
if (! _target)
{
_target = new Dictionary();
}
_target[target] = {};
var s:Object = _target[target];
s["x"] = point.x;
s["y"] = point.y;
s["r"] = Point.distance(new Point(target.x,target.y),new Point(s["x"],s["y"]));
s["d"] = Math.asin(Math.abs(s["y"] - target.y)/s["r"])/(Math.PI / 180);
if (s["x"] > target.x && s["y"] < target.y)
{
s["d"] = 180 - s["d"];
}
else if (s["x"] > target.x && s["y"] > target.y)
{
s["d"] += 180;
}
else if (s["x"] < target.x && s["y"] > target.y)
{
s["d"] = 360 - s["d"];
}
}
/**
* 以新的注册点旋转
* @param target 目标
* @param rotation 角度
*/
static public function rotate(target:DisplayObject,rotation:Number):void
{
if (! _target)
{
return;
}
if (! _target[target])
{
return;
}
var s:Object = _target[target];
var r:Number = rotation - target.rotation;
target.rotation = rotation;
s["d"] += r;
target.x = s["x"] + s["r"] * Math.cos((s["d"]) * Math.PI / 180);
target.y = s["y"] + s["r"] * Math.sin((s["d"]) * Math.PI / 180);
}
/**
* 取消注册
* @param target 目标
*/
static public function unregister(target:DisplayObject):void
{
if (! _target)
{
return;
}
if (! _target[target])
{
return;
}
_target[target] = null;
}
}
}
浙公网安备 33010602011771号