Функции поворота, масштабирования и перемещения с использованием as3 - PullRequest
1 голос
/ 22 марта 2012

Мы хотим масштабировать, вращать и перетаскивать функциональность во flash as3. У меня есть некоторый код. Функциональность вращения работает хорошо. Но после поворота изображения функция масштабирования не работает.

вращаем и масштабируем изображение на одну опорную точку.

Вот код:

function scaleRotateFromPoint(sx:Number, sy:Number, ptCenter:Point, angle:Number):void{
    var mat:Matrix = imgMat.clone();
    mat.tx -= ptCenter.x;
    mat.ty -= ptCenter.y;
    mat.rotate (angle*(Math.PI/180));
    mat.scale(sx,sx);
    mat.tx += ptCenter.x;
    mat.ty += ptCenter.y;
    loaderFirst.transform.matrix = mat;
}   

нам нужно передать одну точку, значение масштабирования и угол поворота.

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 25 марта 2012

Я только что поиграл с вашей функцией во 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.)

0 голосов
/ 23 марта 2012

Я думаю, что ваша проблема в том, что вы используете метод поворота и масштабирования.Это хорошие методы, но только если вы применяете одно преобразование за раз.

Вы должны разделить результат каждого преобразования в матрицу (или правильно использовать поля a, b, c и т. Д.) И затем умножить ихиспользование .scale () и затем .rotate () может переопределить друг друга.

mScale.scale (0.5f, 0.5f);mRotate.rotate (0,64);resultMatrix = новая матрица (image.matrix);

resultMatrix.multiply (mScale);resultMatrix.multiply (mRotate);

кстати, это не скомпилирует его, просто чтобы показать, как этого можно достичь.Надеюсь, это поможет;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...