Я только что поиграл с вашей функцией во Flash, и она, кажется, отлично работает для меня.
Я изменил код так, чтобы он принимал объект преобразования в качестве параметра, и установил модифицированную матрицу после ее изменения, чтобы обеспечить абсолютную уверенность, что она используется правильно.
function scaleRotateFromPoint(t:Transform, sx:Number, sy:Number, ptCenter:Point, angle:Number):void {
var mat:Matrix = t.matrix;
mat.tx -= ptCenter.x;
mat.ty -= ptCenter.y;
mat.rotate (angle*(Math.PI/180));
mat.scale(sx,sy);
mat.tx += ptCenter.x;
mat.ty += ptCenter.y;
t.matrix = mat;
}
// usage:
scaleRotateFromPoint(clip.transform, 1.01, 1.01, new Point(277,185), 5 );
Очевидная проблема может заключаться в том, что вы указываете центральную точку в локальных координатах DisplayObject
. Центральная точка указана в родительском координатном пространстве.
Если вам нужно указать координаты в локальном пространстве, есть один простой способ преобразования между координатными пространствами с использованием функций DisplayObject.localToGlobal()
и globalToLocal()
. (В качестве альтернативы вы можете invert()
локальная матрица и transformPoint()
, чтобы получить точку в пространстве parent
.)