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会执行取存器中的程序逻辑。最终的结果,可能会牵涉到多个相关变量的修改。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值