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
}
}
});
其实也没有什么东西就是一个鼠标移动算两点之间角度的算法。在实际应用中一定要注意坐标系的统一。
当点击指定区域图片(精灵)进行旋转
最新推荐文章于 2021-06-30 14:34:58 发布