2011-10-28 2 views
0

J'ai un cadran que je fais glisser autour d'un cercle pour me donner une lecture entre 0 et 1.AS3 valeur continue de rotation curseur

Quelque chose comme ceci:

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; 

grand, de ce travail, sauf si le curseur passe de 359 degrés à 1 degré, ma valeur entre 0 et 1 revient à zéro. (Ce qui est logique, car la valeur est basée sur l'angle de mon curseur)

J'essaie de trouver un moyen pour que le cadran passe de 359 degrés à 361 et plus bas.

Dans ma tête: je dois vérifier si la valeur suivante de mon pointeur de souris dépasse le point de 360 ​​degrés et ajoute 360 ​​au total, pour l'arrêter et revenir à zéro et continuer à 361 degrés.

Je ne peux pas travailler juste comment mettre cela en code ...

Répondre

0

Sur chaque image lorsque vous faites pivoter le bouton, vérifiez le changement de distance angulaire au lieu d'angle direct. Enregistrez l'angle des images précédentes et vérifiez si la différence est positive ou négative.

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; 

diffdevrait contenir une valeur que si elle a été tournée vers la droite, est positif (ou négatif si la rotation est à gauche). Ajoutez simplement cela à l'angle total.

Il pourrait y avoir des erreurs dans le code (il a fallu d'un ancien projet), mais c'est l'essentiel de celui-ci :)

Hope that helps!