首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何防止物体在达到全圆时旋转360度?

如何防止物体在达到全圆时旋转360度?
EN

Stack Overflow用户
提问于 2015-01-24 18:53:27
回答 2查看 208关注 0票数 2

我有一个图像,它总是指向鼠标的方向。

在某个角度从180deg-180deg,我如何使图像采取短角而不是整圈?

代码语言:javascript
复制
// 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)';

小提琴

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-01-24 21:51:17

角度是相同的模数360度,所以为了避免像359°这样的大旋转,你选择-1°,为了避免-359°,选择1°。

你可以做这样的事

代码语言:javascript
复制
var turnDegrees = (mouseAngle - FIREFLY.ANGLE) ;
if(-540<turnDegrees&&turnDegrees <=-180) turnDegrees+=360;
else if(180<turnDegrees&&turnDegrees<=540) turnDegrees-=360;

但事实证明,FIREFLY.ANGLE可以使用较大的值,因此为了避免大量其他if子句,一般的公式更好。这里有一个使用模块化的

代码语言:javascript
复制
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

票数 0
EN

Stack Overflow用户

发布于 2015-01-24 18:58:34

您可以关闭CSS转换,并自己进行插值。

试着计算鼠标移动时角度之间的差异,并将其加到一个总角中,这样就不会将角度绑定到(-180,180)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28129072

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档