如果同一个动画片段的两个影片剪辑实例放置在舞台上,并且一个在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