关于AS动态控制元件绕Y轴翻转

        众所周知,可以使用DisplayObject类的rotation属性来定义对象旋转的角度。但这个旋转仅是通过元件以变形点为中心做绕Z轴的旋转,那么,当遇到需要绕Y轴的旋转情况,该如何解决呢?
        最初我的想法是,使用DisplayObject类的rotationY 属性来实现。
在这里插入图片描述
        但是使用之后发现,虽然实现了想要的功能,但是却使图片模糊了,思考后猜测:其实现原理是先把素材转化为位图,再把位图进行坐标变换得到指定的素材。
        再继续思考,元件矢量图转化为位图后,肯定是通过某种计算之后得到旋转后的位置吧,那么肯定在矩阵变换那里进行了变换才得到的,那为什么不直接修改元件的矩阵来得到自己想要的位置呢?
        于是再进一步,通过使用DisplayObject类的transform属性的matrix属性,可以对显示对象进行显示的线性变换,这不就正是我们所需要的吗?
在这里插入图片描述
矩阵变换的原理可参考:理解FLASH 8中的矩阵变换

由矩阵变换的原理中的:
x’ = xa + yc + tx
y’ = xb + yd + ty
        根据渲染管线的顺序,可以推测我们设置的矩阵是在顶点坐标系进行的变换,那么,每一个像素都会根据该矩阵的公式进行坐标变换,那么,我们只需要设置a的值,让它每一个像素的x坐标都在它相对的位置上,那么就达到的绕Y轴翻转的效果。所以可得以下代码:

var myMatrix:Matrix = mc.transform.matrix;
myMatrix.a = -myMatrix.a;
mc.transform.matrix = myMatrix;

注意:该方法只适用于当前对象绕 y=0 轴进行旋转的,如果y != 0时,需要去计算得到对应的值再更改

你可能感兴趣的:(分支学习,AS3)