2011-10-28 78 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應該包含一個值,如果它旋轉到正確的,是正的(或負如果向左旋轉)。只需將其添加到總角度即可。

有可能是在代碼中(把它從一箇舊的項目)的一些錯誤,但這是它的精神:)

希望幫助!