zoukankan      html  css  js  c++  java
  • 动态“修改”注册点,实现任意点旋转

    动态“修改”注册点,实现任意点旋转

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

      

  • 相关阅读:
    gitio博客搭建,hexo + NeXT
    [MIsc]JD笔试编程题
    [MATH]Big Integer +
    【Math】GCD XOR 证明
    【Math】最近点对
    【SRM】600#div2 B 枚举
    【Game】组合游戏
    【Game】找出游戏必胜态
    【DP】树形DP 记忆化搜索
    141. Linked List Cycle
  • 原文地址:https://www.cnblogs.com/fengziwu/p/13702537.html
Copyright © 2011-2022 走看看