2011-10-28 48 views
0

我有一个转盘,我绕了一圈拖到给我读0和1之间AS3连续值

事情是这样的:

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

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

保存上一帧的角度,看看差异是正面还是负面。

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

有可能是在代码中(把它从一个旧的项目)的一些错误,但这是它的精神:)

希望帮助!