8.2.5 实例分析

   下面对以上代码作简要说明:

(1)按照常规步骤创建并拷贝matrix_rectmatrx

var myMatrix:Matrix=matrix_rect.transform.matrix;

此处应该注意大小写,transform内部并不存在Matrix对象。Matrix是矩阵类的名字,matrix是实例的名字。在AS3中,这样的情况俯拾皆是,一定要小心。

在编写代码时,一定要注意类的继承关系。假如使用了Object对象来声明myMatrix,编译时并不会报错,但是在随后运行将提示类型不匹配错误。

(2)创建好自定义矩阵对象之后,代码需要计算matrix_rect的中心点坐标,并将其移动到坐标系原点:

var tempxtempy;

tempx=matrix_rect.x+matrix_rect.width/2;//计算中心点x坐标

tempy=matrix_rect.y+matrix_rect.height/2;//计算中心点y坐标

myMatrix.translate(-tempx-tempy);

此时的情形可参考图

(3)使用myMatrix.rotate()方法将对象逆时针旋转45度。由于该方法的参数为弧度,所以代码中进行了简单数学转换。因为matrix_rect的中心点已经移动到了坐标原点,所以这次旋转围绕对象的中心进行。图演示的就是此时的情形。

(4)再次使用Matrix类的translate()方法把旋转过的matrix移动到原来的位置。得到最终效果。

实际上,到这里为止代码并没有影响matrix_rect及其显示,所有的移动和旋转都是对myMatrix进行的操作,得到的是一个转换运算矩阵。图8-6和图8-7是为了形象说明每条语句的作用而作的演示示例,并不会出现在舞台上。只有经过最后一句用myMatrix矩阵替换matrix_rect的内部矩阵对象之后,这些操作才真正作用到matrix_rect显示对象上,并将最终结果(如图8-5)显示在舞台上。最终用户只会看到居于舞台中央的矩形围绕中心旋转了45度。

属性transform中的成员都是只读的。所以matrix也不例外,可以更换但是不可以修改。在代码中不能直接对matrix_rect.transform.matrix进行操作。如果尝试以下代码,编译器将会显示一条错误。

matrix_rect.transform.matrix.translate(-tempx-tempy);//错误代码

必须将transform内部的对象或者transform对象本身拷贝到一个副本里,并对副本进行操作,然后用副本替换显示对象的内部对象。这种用法容易引起困惑。可以理解matrix对象为一个固化的机械零件,可以仿制并对仿制品进行改进,也可以用仿制的零件替换,但其本身不能拆解。

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值