Тут основная проблема определить в какую сторону надо вращать на данный момент, по часовой или против часовой, для себя я сделал класс, которым пользуюсь по мере необходимости.

Код AS3:
package
{
/**
* ...
* @author Lexcuk
*/
public class Rad
{
public static var rx:Number = 0;
public static var ry:Number = 0;
public static const PI:Number = Math.PI;
public static const PI2:Number = Math.PI + Math.PI;
public static const PI_DIV_2:Number = Math.PI / 2;
public static function rotPoint(ax:Number, ay:Number, rad:Number):void {
var cosrad:Number = Math.cos(-rad);
var sinrad:Number = Math.sin(-rad);
rx = ax * cosrad + ay * sinrad;
ry = ay * cosrad - ax * sinrad;
}
public static function getAngl(tx:Number, ty:Number):Number {
var res:Number = Math.atan2(tx, ty)+PI;
return -res;
}
public static function angCorrectRad(_ang:Number):Number {//корректор углов
if (_ang > -PI && _ang < 0) return _ang;
if (_ang < PI && _ang > 0) return _ang;
_ang = _ang % (PI2);
if (_ang > 0) {
if (_ang >= PI) _ang = _ang - PI2;
}else {
if (_ang <= - PI) _ang = _ang + PI2;
}
return _ang;
}
}
}
Можно привязываться к этому классу, что бы всегда попадать в принятые рамки, как-то где минус угла -180, где плюс + 180 градусов, и как воспринимать угол 1340 градусов, или радианов. Как пользоваться.

Код AS3:
package
{
import flash.display.*;
import flash.events.*;
import flash.geom.*;
import flash.text.*;
/**
* ...
* @author Lexcuk
* http://murmadillo.tut.su/m/rad-doc.swf
*/
public class Doc extends Sprite
{
private var turSp:Sprite;
private var turX:Number = 200;
private var turY:Number = 150;
private var curRad:Number = 0;
private var targetRad:Number = 0;
private var radStep:Number = 0.1;
public function Doc()
{
addChild(turSp = new Sprite());
turSp.graphics.lineStyle(1, 0x000000);
turSp.graphics.drawCircle(0, 0, 2);
turSp.graphics.drawCircle(0, 0, 50);
turSp.graphics.lineStyle(3, 0xFF0000);
turSp.graphics.drawCircle( 0, -60, 5);
addEventListener(Event.ENTER_FRAME, enterFrameHandler);
}
private function enterFrameHandler(e:Event):void {
targetRad = Rad.angCorrectRad(Rad.getAngl(stage.mouseX - turX, stage.mouseY - turY));
curRad = Rad.angCorrectRad(curRad);
var minusRad:Number = Rad.angCorrectRad(targetRad - curRad);
if (Math.abs(minusRad) > Math.PI) {
minusRad = - Rad.angCorrectRad(curRad - targetRad);
}
if (Math.abs(minusRad) > radStep) {
if (minusRad > 0) curRad += radStep; else curRad -= radStep;
} else curRad = targetRad;
var m:Matrix = turSp.transform.matrix;
m.identity();
m.rotate(curRad);
m.translate(turX, turY);
turSp.transform.matrix = m;
}
}
}
Демо
http://murmadillo.tut.su/m/rad-doc.swf
На буржуйском форуме эта штука понравилась
http://www.kirupa.com/forum/showthre...oblem-of-enemy
А вом надо при нажатии мыши ну так можно на событие нажатия кнопки мыши добавлять enterFrame, а при отпусканиии удалять enterFrame слушатель.