我有一个表盘,我绕着圆圈拖动,给我一个0到1之间的读数。
这样的事情:
dx = mouseX-centerX;
dy = mouseY-centerY;
rad = Math.atan2(dy,dx);
rad += offset;
Tweener.addTween(knob,{y:centerY - Math.cos(rad)*radius, time:.1, transition:"easeOutSine"});
Tweener.addTween(knob,{x:centerX + Math.sin(rad)*radius, time:.1, transition:"easeOutSine"});
knob.rotation = rad * 180 / Math.PI;
这项工作很棒,除非滑块从359度变为1度,我在0和1之间的值将返回零。 (这是有道理的,因为值是基于滑块的角度)
我正试图找到一种方法让表盘基本上从359度移动到361度。
在我的脑海中:我需要检查我的鼠标拖动的下一个值是否超过360度点并向总数添加360,以阻止它返回到零并继续到361度。
我不知道如何把它放到代码中......
答案 0 :(得分:0)
旋转旋钮时,在每个画面上,检查角度距离的变化而不是直接角度。
保存先前的帧角度,看看差异是正还是负。
var rad = Math.atan2(dy, dx);
var diff = rad - oldRad;
oldRad = rad;
if( diff > Math.PI )
diff -= Math.PI * 2;
if( shortestAngle < -Math.PI )
diff += Math.PI * 2;
diff
应包含一个值,如果它向右旋转,则为正(如果向左旋转则为负值)。只需将其添加到总角度即可。
代码中可能存在一些错误(从旧项目中获取),但这是它的要点:)
希望有所帮助!