Собственно классическое решение задачи поворота спрайта на заданный угол вокруг произвольной точки (чаще всего его центра) путем матричных преобразований описана в куче литературы и интернет-источниках и звучит следующим образом: перенос спрайта таким образом, чтобы точка совпадал с точкой 0.0,0.0 , поворот на заданный угол, перенос обратно.
Функция RotateAroundAxis представляет реализацию данного метода (Axis — ось или точка, вокруг которой будет повернут спрайт, Angle — угол поворота):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
private function RotateAroundAxis(Axis:Vector2,Angle:Number):void { // Перенос в 0,0,0 var MoveVector:Vector2 = new Vector2(); Vector2.Vec2Subtract(Axis,new Vector2(0.0,0.0),MoveVector); var matrix:Matrix = new Matrix(); matrix.identity(); matrix.translate(MoveVector.x,MoveVector.y); CountWorldMatrix(matrix); // Поворот var RotAngle:Number = Angle*Math.PI/180.0; // Получить матрицу вращения var Rot:Matrix = new Matrix(); Rot.identity(); Rot.rotate(RotAngle); CountWorldMatrix(Rot); // Вернутся обратно matrix.identity(); matrix.translate(Axis.x,Axis.y); CountWorldMatrix(matrix); } |
Вращение спрайта вокруг произвольной точкиRead More »