Матрица преобразований для гуманитариев

Сегодня передо мной стала задача сделать интересную задачу — поворот лодки с персонажем внутри с использованием имеющейся графики. При этом при повороте персонаж должен оставаться на «том же месте» в лодке:

Да, для этого понадобится использовать матрицу преобразований. Но как её получить? Оказывается есть безумно простой метод. Первым делом нужно создать шаблонный MovieClip в Flash IDE:

1. Создаем шаблонный спрайт (можно даже простой прямоугольник — большой роли это не играет). Я дал имя этому экземпляру «map».

2. Преобразуем, подгоняя его для каждого варианта поворот лодки:

Далее, все что нам нужно — это считать матрицу преобразований этого спрайта! Вот и весь фокус:

var map:DisplayObject = _boatAsset.getChildByName("map");
var transformMatrix:Matrix = map.transform.matrix;
var transformedPoint:Point = transformMatrix.transformPoint(_targetPoint);

Вот как это в результате работает:

Ссылка на исходник:

https://github.com/Regul777/transformation_matrix

2013.01.21