如果同一個動畫片段的兩個影片剪輯實例放置在舞臺上,並且一個在Flash中水平翻轉..是否有方法可以檢測到哪一個已翻轉在代碼中水平嗎? ScaleX似乎保持不變。檢測動畫片段已被水平翻轉在舞臺上as3
使用Flash UI(Edit-> Flip Horizontal)而不是通過代碼水平翻轉MovieClip。
如果同一個動畫片段的兩個影片剪輯實例放置在舞臺上,並且一個在Flash中水平翻轉..是否有方法可以檢測到哪一個已翻轉在代碼中水平嗎? ScaleX似乎保持不變。檢測動畫片段已被水平翻轉在舞臺上as3
使用Flash UI(Edit-> Flip Horizontal)而不是通過代碼水平翻轉MovieClip。
嘗試:
function isFlippedHorizontally(obj:DisplayObject):Boolean
{
return obj.transform.matrix.a/obj.scaleX == -1;
}
trace(isFlippedHorizontally(yourObject));
編輯:
我應該佔到對象的scaleX
;現在調整。
或者:
import fl.motion.MatrixTransformer;
function isFlippedHorizontally(obj:DisplayObject):Boolean
{
return MatrixTransformer.getSkewYRadians(obj.transform.matrix)/Math.PI == 1;
}
trace(isFlippedHorizontally(yourObject));
編輯:
最後例如偶然有計算在水平翻轉代替垂直翻轉。
+1這爲我工作。 – Marty
如果對象已被翻轉和縮放,檢查'obj.transform.matrix.a/obj.scaleX <0;'是否正確? –
我喜歡fireeyedoy的解決方案更加爲它的緊湊性和簡單,但你也可以用一些比較的BitmapData做到這一點:
var bmd1:BitmapData = new BitmapData(mc1.width, mc1.height);
var bmd2:BitmapData = new BitmapData(mc2.width, mc2.height);
var cbmd1:BitmapData = new BitmapData(mc1.width, mc1.height);
var cbmd2:BitmapData = new BitmapData(mc2.width, mc2.height);
var cmatrix1:Matrix = new Matrix();
var cmatrix2:Matrix = new Matrix();
cmatrix1.tx = -mc1.x;
cmatrix1.ty = -mc1.y;
cmatrix2.tx = -mc2.x;
cmatrix2.ty = -mc2.y;
bmd1.draw(mc1);
bmd2.draw(mc2);
cbmd1.draw(this, cmatrix1);
cbmd2.draw(this, cmatrix2);
if(cbmd1.compare(bmd1))
{
trace("mc1 is flipped!");
}
else if(cbmd2.compare(bmd1))
{
trace("mc2 is flipped!");
}
這是假設你的影片剪輯的左上角對齊。如果不是,那麼在繪製它們時,必須在矩陣中添加適當的tx和ty值。
MovieClip是如何翻轉的? – sberry
對不起,我應該更具體。在FLA的庫中有一個父剪輯鏈接。它作爲SWC導出,這是從代碼訪問的內容。代碼將這個鏈接的父剪輯添加到它的舞臺上。在父剪輯中,從FLash IDE中放置兩個子剪輯。一個翻轉(編輯>水平翻轉),另一個不是。我無法弄清楚如何通過代碼翻譯哪一個。 – prettymuchbryce