Есть две проблемы, касающиеся различий в рисовании API.
Во-первых, Flash не отслеживает матрицы преобразования, если вы не рисуете несколько спрайтов в иерархии отображения. Это не рекомендуется, поскольку каждая успешная рекурсия создает как минимум два экранных объекта и загромождает иерархию отображения.
Второе, более или менее, из-за первого, заключается в том, что flash также автоматически не применяет преобразование к методам рисования, если не используется несколько экранных объектов, как описано выше.
Следующий код примерно сделает то, что вам нужно. Я поиграл с вашим фрагментом, но не уверен, что созданный на моей стороне рендер соответствует алгоритму, который вы использовали при обработке.
private var matrices:Vector.<Matrix>;
private var matrix:Matrix;
public function Main()
{
matrices = new Vector.<Matrix>();
matrix = new Matrix();
matrix.identity();
}
private function pushMatrix():void
{
matrices.push(matrix.clone());
}
private function popMatrix():void
{
matrix = matrices.pop();
}
В рамках вашего метода рисования вам нужно будет поддерживать две точки - исходную и целевую. Каждый представляет преобразованную точку на основе текущей матрицы.
var origin:Point;
var target:Point;
pushMatrix();
matrix.rotate(theta);
origin = matrix.transformPoint(new Point(0, 0));
target = matrix.transformPoint(new Point(0, -h));
graphics.moveTo(origin.x, origin.y);
graphics.moveTo(target.x, target.y);
...
Существуют основные оптимизации, которые вы можете выполнить для алгоритма. Повторное использование существующих точек может помочь.
У меня не установлена обработка, но если бы вы могли связать видео, представляющее этот конкретный алгоритм, это могло бы помочь другим понять, к чему вы стремитесь.
Удачи!