2011-03-24 2 views
1

Hey gang. Stumped sur quelque chose.Problème de rotation de l'image avec MOUSE_MOVE

J'ai un disque que je tourne avec la souris avec event.MOUSE_MOVE, comme une molette sur certains équipements audio. Tout fonctionne presque comme prévu, mais le problème que je rencontre est que le disque saute toujours au point où l'utilisateur clique sur le disque. J'ai besoin du point sur le disque sur lequel l'utilisateur clique pour rester sous la souris pendant que l'utilisateur tourne le disque mais je n'arrive pas à trouver le bon calcul pour y arriver. Voici le code que je utilise:

var xd = (_knob.x - _stageRef.stage.mouseX); 
var yd = (_knob.y - _stageRef.stage.mouseY); 
var radAngle = Math.atan2(yd, xd); 
_knob.rotation = int(radAngle * 360/(Math.PI * 2) - 90); 

_knob est un cercle vectoriel enveloppé dans un MovieClip, avec le cercle centré sur le point de repérage du MovieClip. _stageRef représente l'étape principale.

Toute aide serait géniale. J'ai parcouru l'interweb et ne peux rien trouver.

Thx!

Répondre

1

Vous définissez la rotation _knob à l'angle entre _knob et le curseur de la souris. Donc si la rotation était 0, et l'angle 45, la rotation devient 45, donc elle saute. Qu'est-ce que vous avez besoin est une mesure change dans cet angle, ne pas fixer instantanément:

var _mouseAngle:Number; 

function getMouseAngle():Number 
{ 
    var xd = (_knob.x - _stageRef.stage.mouseX); 
    var yd = (_knob.y - _stageRef.stage.mouseY); 
    return Math.atan2(yd, xd); 
} 

function onMouseDown(event:MouseEvent):void 
{ 
    _mouseAngle = getMouseAngle(); 
} 

function onMouseMove(event:MouseEvent):void 
{ 
    var newAngle:Number = getMouseAngle(); 
    _knob.rotation += (newAngle - _mouseAngle) * 180.0/Math.PI; //EDIT: forgot to convert into degrees 
    _mouseAngle = newAngle; 
} 

(code non testé)

+0

Je vois où vous allez là-bas, mais il ne semble pas fonctionner. L'angle ne doit-il pas être reconverti en radians pour être utilisé contre la propriété de rotation? Cette ligne semble manquer de: _knob.rotation + = newAngle - _mouseAngle; J'ai essayé d'implémenter votre suggestion mais elle ondule actuellement en avant et en arrière plutôt que de tourner. – Ribs

+0

Vous ne pouvez pas avoir une fonction void qui retourne un int. Signification: function getMouseAngle(): void doit être une fonction getMouseAngle(): Number. J'ai modifié votre réponse pour correspondre à cela. – SimplyZ

+0

j'ai vu cela sur sa réponse et l'ai changé dans mes tests. n'est pas venu à moi pour éditer sa réponse: P – Ribs