8.7.7 分析映射逻辑

  当变形显示对象时,如果要得到以父容器相对坐标系为基准的形变,变形矩阵就不仅要应用在显示对象自身,同时也应用于txty。但是根据仿射变形的公式:f(x)=Ax+b,变形矩阵的值abcd仅仅与对象的位置数据相乘,并不会和位移矢量txty进行运算。所以修改变形矩阵内部的d值,不会对ty产生作用。

若要得到以父容器相对坐标系为基准的形变,必须在执行公式计算之前,提前计算出修正后的位移矢量。Matrix类的内建方法,都是遵循这样的机制。当代码调用这些方法的时候,AS3自动执行了对txty的修正。

然而在自定义的flip_V_1()函数中,直接修改的仅仅是矩阵的d值,对于ty并未操作。在用变形矩阵替换显示对象原有矩阵时,显示对象的形状被重新计算,并在下一次重绘时更新,这个过程是应用变形矩阵的过程,而不是修正变形矩阵的过程,所以在flipobjbox.flipObj.transform.matrix=objMatrix;语句中,变形矩阵的txty值不会被修改。而显示对象内部采用的是其自身的内部坐标,不包含txty,最终的结果,自然就是显示对象在原地变形了。

由此可见,修正这个小问题十分简单,只需要在objMatrix.d=Math.sin(flipstep);后增加对ty的修正即可:

function flip_V_1():void

{

         flipstep+=0.1;

         objMatrix.d=Math.sin(flipstep);

         objMatrix.ty=50*Math.sin(flipstep);

         flipobjbox.flipObj.transform.matrix=objMatrix;

}

再次运行程序,这次的运行结果就符合预期了。其原理可参考图

ActionScript 3.0中,许多类的属性都不是简单的变量,而是setter/getter取存器。当代码为类对象的取存器属性赋值时,Flash Player会执行取存器中的程序逻辑。最终的结果,可能会牵涉到多个相关变量的修改。

阅读更多
想对作者说点什么? 我来说一句

逻辑斯蒂回归模型,java

2014年09月01日 1.11MB 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭