当点击指定区域图片(精灵)进行旋转

var offset = _this.__eventOffset;
				var rotateDiv = _this.m_viewElement.querySelector('.actor-rotate');


				
				//统一坐标系
				//var _center =  object.parent.clientPosToView(object.m_position.x,object.m_position.y, _this.m_scene.getCurrentScale());
				var _pre =  object.parent.clientPosToView(_this._preX, _this._preY, _this.m_scene.getCurrentScale());
				var _oevnet =  object.parent.clientPosToView(event.clientX, event.clientY, _this.m_scene.getCurrentScale());

				// object.m_position.x的坐标本身就是世界坐标下的
				var _centerX = object.m_position.x;//锚点
				var _centerY = object.m_position.y;

				var _preX = _pre.x;//原来的坐标
				var _preY = _pre.y;

				var _oeventX = _oevnet.x; //鼠标现在的坐标
				var _oeventY =_oevnet.y;


				var _predegA = Math.atan((_preY - _centerY)/(_preX - _centerX));//原来与水平线的夹角弧度
    			var _degA    = Math.atan((_oeventY - _centerY)/(_oeventX - _centerX));//现在与水平线的夹角弧度
    			var _vectorab = (_oeventX-_centerX)*(_preX-_centerX) + (_oeventY-_centerY)*(_preY-_centerY);//向量相乘

    			var _a = Math.sqrt(Math.pow((_oeventX-_centerX),2) + Math.pow((_oeventY-_centerY),2));//向量的模
    			var _b = Math.sqrt(Math.pow((_preX-_centerX),2) + Math.pow((_preY-_centerY),2));//向量的模

			    var _cosa;
			    if(_a*_b == 0){
			        _cosa = 1;
			    }else{
			        _cosa = _vectorab/(_a*_b);
			    }
			    if(_cosa>1){
			        _cosa = 1;
			    }

			    var _deg = Math.acos(_cosa)*4/ Math.PI;

			    if(_degA<_predegA) {
			        _deg = -_deg;
			    }


			    var rotation = object.m_rotation;

			    rotation += 180/Math.PI * _deg;
			    //取整
			    rotation = Math.round(rotation);
			    //0 - 360取值之间
			    if (rotation <0) {
			    	rotation = 360;
			    }else{
			    	rotation = rotation%360;
			    	rotation  = Math.abs(rotation);
			    }

			  
			    
				
				

				//记录下上一点坐标
				_this._preX = event.clientX;
				_this._preY = event.clientY;


				var wraper = gameEditor.GetWraper(object.m_id);
				var component = wraper.getComponentByType('Transform');

				eventCenter.raise('NOTIFY_PROPERTY_CHANGE', {
		            "wraperId": _this.m_currentId,
		            "componentId": component.id,
		            "propertyKey": 'transform',
		            "value": {
		            	Position: {
		            		x: object.m_position.x,
		            		y: object.m_position.y,
		            		z: object.m_position.z
		            	},
		            	Scale: {
		            		x: object.m_scale.x,
		            		y: object.m_scale.y
		            	},
		            	Rotation: {
		            		x: rotation,
		            		y: 0
		            	}
		            }
		        });
其实也没有什么东西就是一个鼠标移动算两点之间角度的算法。在实际应用中一定要注意坐标系的统一。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值