2011-09-28 7 views
3

にステージ上で左右反転された検出することは、私は1つが反転してきたかを検出することができる方法はありますコードで横に? ScaleXは変わっていないようです。が..同じムービークリップの2つのムービークリップインスタンスがステージ上に配置され、1つは、Flashで左右反転されている場合は、ムービークリップがAS3

ムービークリップは、コードを介して、(編集 - >水平フリップ)フラッシュUIを使用して、水平方向ではない反転されています。

+0

どのようにMovieClipが最初に反転しましたか? – sberry

+0

申し訳ありませんが、私はより具体的にすべきでした。 FLAのライブラリにリンクされている親クリップがあります。これはSWCとしてエクスポートされ、これがコードからアクセスされるものです。コードは、このリンクされた親クリップをステージに追加します。親クリップ内には、2つの子クリップがあり、それらはFLASH IDEからその中に配置されます。 1つは反転されています([編集]> [水平方向に反転])、もう1つは反転しません。私は1つが反転したコードを経由して識別する方法を見つけ出すことはできません。 – 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

、それは<0' obj.transform.matrix.a/obj.scaleXを確認する正しいですか? –

0

私はそれがコンパクトでシンプルですが、あなたはまた、いくつかのBitmapData比較でそれを行うことができため、よりfireeyedoyのソリューションを好き:

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値をマトリックスに追加する必要があります。

関連する問題