AS3来自旋转滑块的连续值

时间:2011-10-28 12:13:35

标签: actionscript-3 animation trigonometry

我有一个表盘,我绕着圆圈拖动,给我一个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度。

我不知道如何把它放到代码中......

1 个答案:

答案 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 包含一个值,如果它向右旋转,则为正(如果向左旋转则为负值)。只需将其添加到总角度即可。

代码中可能存在一些错误(从旧项目中获取),但这是它的要点:)

希望有所帮助!