使用as3旋转,缩放和移动功能

时间:2012-03-22 19:37:14

标签: actionscript-3 flash

我们希望在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 :(得分:0)

我刚刚在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的本地坐标中指定了中心点。 中心点在父坐标空间中指定。

如果需要在局部空间中指定co-ords,可以使用DisplayObject.localToGlobal()globalToLocal()函数直接在坐标空间之间进行转换。 (或者,您可以invert()使用本地矩阵,transformPoint()可以在parent的空格中获得一个点。)

答案 1 :(得分:-1)

我认为你的问题是你使用了旋转和缩放方法。这些都是很好的方法,但前提是你一次应用一个转换。

你应该将每个转换的结果分成一个矩阵(或正确使用a,b,c等字段),然后将它们相乘,使用.scale(),然后.rotate()可能会相互覆盖。

mScale.scale(0.5f,0.5f); mRotate.rotate(0.64); resultMatrix = new Matrix(image.matrix);

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

顺便说一下,这不会编译它只是为了展示它是如何实现的。希望这会有所帮助;)