Actionscript 3 使用as3旋转、缩放和移动功能

Actionscript 3 使用as3旋转、缩放和移动功能,actionscript-3,flash,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; ma

我们希望在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;
}   
我们需要传递一个点,缩放值和旋转角度


提前谢谢。

我认为您的问题在于使用了旋转和缩放方法。这些都是很好的方法,但仅当您一次应用一个转换时

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

mScale.量表(0.5f,0.5f); 旋转(0.64); 结果矩阵=新矩阵(image.Matrix)

结果矩阵乘法(mScale); 结果矩阵乘法(mRotate)


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

我刚刚在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()
父空间中获得一个点。)

当您说“旋转图像后,缩放功能不起作用”时,您的意思是它不再有任何效果吗?或者它不能正常工作?请提供更多信息@艾丹,它不能正常工作。它具有缩放效果,但不会从给定点进行缩放:(好的,代码的一般形状对我来说似乎是合理的,这让我想知道这是否是函数本身的问题?你的意思是从“imgMat”克隆矩阵并分配给加载程序的矩阵吗?另外,你不应该按(sx,sy)缩放吗)?Senioular的优秀文章:矩阵方法可以组合。它们相当于对矩阵中的数字进行乘法和/或加法。一个操作不会覆盖以前的操作,而是建立在它的基础上。