同じムービークリップの 2 つのムービー クリップ インスタンスがステージ上に配置され、1 つが Flash で水平方向に反転された場合.どちらが水平方向に反転されたかをコードで検出する方法はありますか? ScaleX は変更されていないようです。
ムービークリップは、コードではなく、Flash UI ([編集] -> [水平方向に反転]) を使用して水平方向に反転されています。
同じムービークリップの 2 つのムービー クリップ インスタンスがステージ上に配置され、1 つが Flash で水平方向に反転された場合.どちらが水平方向に反転されたかをコードで検出する方法はありますか? ScaleX は変更されていないようです。
ムービークリップは、コードではなく、Flash UI ([編集] -> [水平方向に反転]) を使用して水平方向に反転されています。
試す:
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 ) );
編集:
最後の例では、水平方向に反転するのではなく、垂直方向に反転した計算が誤って行われていました。
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 値をマトリックスに追加して描画する必要があります。