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

来源:互联网 发布:同声传译软件 知乎 编辑:程序博客网 时间:2024/05/16 00:50
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
原创粉丝点击