动态“修改”注册点,实现任意点旋转
/** * * *------------------------------------------* * | *** 动态“修改”注册点,实现任意点旋转*** | * *------------------------------------------* * * 编辑修改收录: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; } } }