簡體   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