Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 AS3来自旋转滑块的连续值_Actionscript 3_Animation_Trigonometry - Fatal编程技术网

Actionscript 3 AS3来自旋转滑块的连续值

Actionscript 3 AS3来自旋转滑块的连续值,actionscript-3,animation,trigonometry,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"});

我有一个刻度盘,我把它绕着一个圆圈拖动,使读数介于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度


我只是想不出如何把它转换成代码…

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

保存上一帧的角度,然后查看差值是正值还是负值

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;
var rad=Math.atan2(dy,dx);
var diff=rad-oldRad;
奥尔德拉德=拉德;
if(diff>Math.PI)
diff-=Math.PI*2;
if(shortestAngle<-Math.PI)
diff+=Math.PI*2;
diff
应包含一个值,如果向右旋转,则该值为正值(如果向左旋转,则为负值)。只需将其添加到总角度

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

希望有帮助