Вдруг поможет

Код AS3:
package
{
import flash.display.Bitmap;
import flash.display.Sprite;
import flash.events.MouseEvent;
/**
* ...
* @author samana
*/
public class Regulator extends Sprite
{
[Embed(source="../images/image2.jpg")]
private var ImageClass:Class;
private var _bm:Bitmap;
private var _rotationValue:Number = 0;
public function Regulator()
{
_bm = new ImageClass();
_bm.x -= _bm.width / 2;
_bm.y -= _bm.height / 2;
_bm.smoothing = true;
addChild(_bm);
addEventListener(MouseEvent.MOUSE_DOWN, mouseDown);
}
private function mouseDown(e:MouseEvent):void
{
stage.addEventListener(MouseEvent.MOUSE_MOVE, stage_mouseMove);
stage.addEventListener(MouseEvent.MOUSE_UP, stage_middleMouseUp);
}
private function stage_middleMouseUp(e:MouseEvent):void
{
stage.removeEventListener(MouseEvent.MOUSE_MOVE, stage_mouseMove);
stage.removeEventListener(MouseEvent.MOUSE_UP, stage_middleMouseUp);
}
private function stage_mouseMove(e:MouseEvent):void
{
var oldAng:Number = rotation;
var dx:Number = e.stageX - x;
var dy:Number = e.stageY - y;
rotation = Math.atan2(dy, dx) * 180 / Math.PI;
_rotationValue += diffAngles(oldAng, rotation, false);
}
/**
* Вернуть разницу между углами в радианах или грудусах. Приоритет в меньшую сторону круга.
* Сколько нужно добавить или отнять у угла ang1 чтобы он стал равен ang2
* @param ang1 первый угол
* @param ang2 второй угол
* @param inRadian переданные углы и возвращаемое значение в радианах, иначе в градусах
* @return возвращает разницу
*/
private function diffAngles(ang1:Number, ang2:Number, inRadian:Boolean = true):Number
{
var diff:Number;
if (inRadian)
{
//convert to 0 - Math.PI*2
// 3.141592653589793 = Math.PI;
// 6.283185307179586 = Math.PI*2;
if (ang1 < 0)
ang1 = 6.283185307179586 - (ang1 * -1); //to abs
if (ang2 < 0)
ang2 = 6.283185307179586 - (ang2 * -1); //to abs
diff = ang2 - ang1;
if (diff > 3.141592653589793)
diff -= 6.283185307179586;
else if (diff < -3.141592653589793)
diff += 6.283185307179586;
}
else
{
//convert to 0-360
if (ang1 < 0)
ang1 = 360 - (ang1 * -1); //to abs
if (ang2 < 0)
ang2 = 360 - (ang2 * -1); //to abs
diff = ang2 - ang1;
if (diff > 180)
diff -= 360;
if (diff < -180)
diff += 360;
}
return diff;
}
public function get rotationValue():int
{
return _rotationValue;
}
}
}