2011-09-28 77 views
3

如果同一個動畫片段的兩個影片剪輯實例放置在舞臺上,並且一個在Flash中水平翻轉..是否有方法可以檢測到哪一個已翻轉在代碼中水平嗎? ScaleX似乎保持不變。檢測動畫片段已被水平翻轉在舞臺上as3

使用Flash UI(Edit-> Flip Horizo​​ntal)而不是通過代碼水平翻轉MovieClip。

+0

MovieClip是如何翻轉的? – sberry

+0

對不起,我應該更具體。在FLA的庫中有一個父剪輯鏈接。它作爲SWC導出,這是從代碼訪問的內容。代碼將這個鏈接的父剪輯添加到它的舞臺上。在父剪輯中,從FLash IDE中放置兩個子剪輯。一個翻轉(編輯>水平翻轉),另一個不是。我無法弄清楚如何通過代碼翻譯哪一個。 – prettymuchbryce

回答

5

嘗試:

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)); 

編輯:
最後例如偶然有計算在水平翻轉代替垂直翻轉。

+0

+1這爲我工作。 – Marty

+0

如果對象已被翻轉和縮放,檢查'obj.transform.matrix.a/obj.scaleX <0;'是否正確? –

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值。