8.7.8 多次变形

来源:互联网 发布:激战2初始人女捏脸数据 编辑:程序博客网 时间:2024/06/10 07:33

  本例还可以通过应用二次变形矩阵来实现。Matrix类提供concat()方法。该方法可以实现多次变形矩阵的应用。

concat()方法的函数说明为:

方法定义:

public function concat(m:Matrix):void

作用:

连接(Concatenates)一个矩阵到当前矩阵,其效果等于两次变形的效果。在数学角度解释,这种连接等同于两个矩阵相乘。

备注:

1该方法无返回值,将直接修改当前矩阵。

2如果要避免修改,请使用clone方法复制当前矩阵。

参数:

 m:Matrix 用于同当前矩阵连接的一个矩阵

使用concat()方法将两个变形矩阵相乘,在此过程中,txty会参与运算,所以不必在代码中自行设置。通过创建一个处理伸缩映射的变形矩阵,并将它同显示对象的矩阵副本相乘,得到的矩阵将是同直接使用scale()方法等效的。

需要注意的是,该方法直接修改当前矩阵,所以如下的代码是不能达到预期的:

function flip_V_2():void

{

         flipstep+=0.1;

         flipMatrix.d=Math.sin(flipstep);

         objMatrix.concat(flipMatrix);

         flipobjbox.flipObj.transform.matrix=objMatrix;

}

因为在这段代码执行时,每次objMatrix都会被改变,每次执行都是在上次执行的结果上处理。正确的写法应该使用clone()方法,创建objMatrix的副本:

……

var flipMatrix:Matrix=new Matrix();

……

//函数主体

function flip_V_3():void{

flipstep+=0.1;

flipMatrix.d=Math.sin(flipstep);

trace("flipmatrix:"+flipMatrix.toString());

var tempMatrix:Matrix=objMatrix.clone();

trace("OriginalMatrix:"+tempMatrix.toString());

tempMatrix.concat(flipMatrix);

trace("Concat result matrix:"+tempMatrix.toString());

flipobjbox.flipObj.transform.matrix=tempMatrix;

}

……

 

function transtimerHandler(event:TimerEvent):void {

         //动画代码编写入口

         //flip_V_0();

         //flip_V_1();

         //flip_V_2();

         flip_V_3();

}

执行这段程序,动画的显示结果符合预期。