Итак, есть две части. Во-первых, вы хотите найти кратчайший угол между двумя углами. Во-вторых, вам нужно облегчить между углами и положением.
Нахождение кратчайшего угла.
angleDelta будет кратчайшим углом поворота между вашими двумя углами.
var angleDiff:Number = angleTo - currentAngle;
var angleDelta:Number = Math.atan2(Math.sin(angleDiff), Math.cos(angleDiff));
angleDelta *= (180/Math.PI); // Change angle from Radians to Degrees.
Простота между значениями
Я обычно использую простое уравнение в каком-то цикле (обычно enterFrame) для упрощения между простыми значениями.
addEventListener(Event.ENTER_FRAME, enterFrameHandler);
private function enterFrameHandler(e:Event):void
{
rotation += (targetRotation - currentRotation) * 0.2;
x += (targetX - currentX) * 0.4;
y += (targetY - currentY) * 0.4;
}
EDIT *
Это должно сработать для вас.
const TO_DEGREES:Number = 180 / Math.PI;
const TO_RADIANS:Number = Math.PI / 180;
addEventListener(Event.ENTER_FRAME, enterFrameHandler);
function enterFrameHandler(e:Event):void
{
var angleTo:Number = Math.atan2(stage.mouseY - y, stage.mouseX - x) * TO_DEGREES;
if (angleTo > rotation+180) angleTo -= 360;
if (angleTo < rotation-180) angleTo += 360;
rotation += (angleTo - rotation) * 0.2;
x += (stage.mouseX - x) * 0.2;
y += (stage.mouseY - y) * 0.2;
}