如何防止物体在达到完整圆时旋转 360 度
How to prevent object from rotating 360deg when reaching full circle?
我有一个图像,它总是指向鼠标的方向。
在某些时候角度从180deg
到-180deg
,如何让图像拍摄短角度而不是做完整的圆?
// Find ship angle (Math.atan2(y2 - y1, x2 - x1) * 180 / Math.PI;).
var mouseAngle = getAngle(FIREFLY.CENTER.X, FIREFLY.CENTER.Y, currentMousePos[0], currentMousePos[1]);
var turnDegrees = mouseAngle - FIREFLY.ANGLE;
var maxDegrees = 5;
console.log(mouseAngle + " " + FIREFLY.ANGLE);
if (turnDegrees > -5 && turnDegrees < 5) {
// Do nothing.
} else if (turnDegrees < 0) {
FIREFLY.ANGLE -= 5;
} else {
FIREFLY.ANGLE += 5;
}
// Set ship direction.
FIREFLY.style.transform = 'rotate(' + (FIREFLY.ANGLE + 90) + 'deg)';
小提琴
角度
是相同的模360度,因此要避免像359°这样的大旋转,请选择-1°,避免-359°,请选择1°
你可以做类似的事情
var turnDegrees = (mouseAngle - FIREFLY.ANGLE) ;
if(-540<turnDegrees&&turnDegrees <=-180) turnDegrees+=360;
else if(180<turnDegrees&&turnDegrees<=540) turnDegrees-=360;
但事实证明是萤火虫。ANGLE 可以取较大的值,因此为了避免大量其他 if 子句,通用公式更好。这是一个使用模
var turnDegrees = mod(mouseAngle - FIREFLY.ANGLE +180, 360) -180;
function mod(x, value){ // Euclidean modulo
return x>=0 ? x%value : value+ x%value;
}
绘图测试
小提琴更新:http://jsfiddle.net/crl/2rz296tf/31
您可以关闭 CSS 转换,然后自己进行插值。
尝试计算鼠标移动时角度之间的差异并将其添加到总角度中,这样角度就不会绑定到 (-180, 180)
相关文章:
- 防止Iframe窗体在新窗口中打开
- 知道为什么我的旋转木马不会自动更改图片吗
- 有没有一种方法可以防止img get请求使用css或js发生
- 防止Alt+Shift默认操作或检测多种操作系统语言的Javascript
- 如何防止网页加载后自动启动功能
- 当json解析空响应时,Whatwg-Fetch失败,我该如何防止它
- 防止默认锚点行为AngularJS
- 如何防止jQueryonclick事件中的Ruby方法在页面刷新时执行
- 防止ng重复中的重复值(AngularJS)
- 顺时针旋转Svg元件
- 将鼠标旋转限制为特定的度数
- ExtJS网格单元格编辑器,防止焦点松动问题
- 旋转后拖动对象
- 禁用旋转木马中的下一个按钮和上一个按钮
- 防止jQuery Mobile中的ajax缓存
- 防止在所有平台上旋转时改变方向
- 如何防止物体在达到完整圆时旋转 360 度
- 如何防止光标卡在 css 转换中:在火狐中旋转
- 旋转加载图像之前的动画,以防止白色的空白方块
- 推特引导旋转木马.如何防止滑事件从完成