繁体   English   中英

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

[英]Rotate, Scale and Move functionality using as3

我们要在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;
}   

我们需要传递一个点,缩放值和旋转角度。

提前致谢。

我刚刚玩过您在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空间中的一个点。)

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

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

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

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

顺便说一句,这不会编译它只是为了显示它如何实现。 希望这可以帮助 ;)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM