【问题标题】:AS3 Continuous value from rotation sliderAS3 旋转滑块的连续值
【发布时间】:2011-10-28 20:43:44
【问题描述】:

我有一个刻度盘,我将它绕一圈拖动以显示 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 度。

我只是不知道如何将其放入代码中......

【问题讨论】:

    标签: actionscript-3 animation trigonometry


    【解决方案1】:

    在旋转旋钮时,在每一帧上,检查角距离的变化,而不是直接角度。

    保存前几帧的角度,看看差是正的还是负的。

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

    代码中可能有一些错误(取自旧项目),但这就是它的要点 :)

    希望有帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-27
      • 2015-02-28
      • 2013-11-02
      • 1970-01-01
      • 2015-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多