分享
 
 
 

Flash中步入Matrix函数

王朝other·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

看到标题也许很多数学不好或中学时上课打盹的朋友会感到反感,但放心的是在这里的Matrix已经简化了很多琐碎的步骤,也不用大家拿一张纸拼命的做计算。对想制作游戏的朋友也是必学的路程,所以大致上明白了运用的思路就可以说掌握了技巧。

在字典中的说明不够充分让大家去理解,所以开始还是要重复说明一下。Matrix矩阵就像个数组,排列方式是以列与行组成。在flash 8中所提供的是3 x 3矩阵,3x3的矩阵可以定义出一个3D计算,但在Flash 8中只供2D的计算,即 x 和 y 的计算,那么我们来看看这个矩阵的定义

以上的每个字母都有各自的运用意义,分别是:

a = 控制 X 的宽度

b = 控制 Y 的倾斜

c = 控制 X 的倾斜

d = 控制 Y 的高度

tx = 控制 X 坐标位置

ty = 控制 Y 坐标位置

接下来就是如何在Matrix函数中定义,其实很简单。首先汇入 Matrix 的封包,然后就可以开始定义

import flash.geom.Matrix; //导入类包

var myMatrix:Matrix = new Matrix(a, b, c, d, tx, ty); //开始定义Matrix类

当中的a, b, c, d, tx, ty可以直接定义。再来我们把这段引入例子,以证明及帮助了解以上各个参数的运用。

步骤1:在场景上建立一个MC,即画个方形后按F8选择MovieClip(影片),定义实例名为mc

步骤2:到场景第一帧开始我们的代码

Matrix 必须配合 Transform 才能实现出所定义的效果,不多说了开始看看代码吧

import flash.geom.Matrix; //导入Matrix 类包

import flash.geom.Transform; //到入Transform类包

var myMatrix:Matrix = new Matrix(1,0,0,1,100,100); //参数定义为宽度比例为1,无任何的倾斜,高度比例1,xy坐标为100

var myTransform:Transform = new Transform(mc); //Transform对象为场景上的mc

myTransform.matrix = myMatrix; //赋予transform的matrix函数为我们所定的myMatrix类

那么接下来测试就可以看到结果了,看不出什么效果??那么我来换换Matrix的参数值成

var myMatrix:Matrix = new Matrix(1,1,0,1,100,100); //第二参数改为1

这样测试是不是就看到我们的b影响了mc的形状呢??Matrix的运用就是这样,很简单吧??所以很多东西不要以为很困难,其实都很简单。

再来我们要深入一点,去了解Matrix的计算,知其一不知其二也是无法正确掌握好运用的。Matrix的计算其实很简单,就只有两行的公式:

X’ = a*X + c*Y + tx;

Y’ = b*X + d*Y + ty;

意思就是

新坐标X = a * 现有X坐标 + c * 现有Y坐标 + 常量tx;

新坐标Y =b * 现有X坐标 +d * 现有Y坐标 + 常量ty;

我们把这个例子代入公式中

a = 2, b = 0, c = 0, d = 1, tx = 0, ty = 0

X’ = 2x + 0y + 0;

Y’ = 0x + 1y + 0;

X’ = 2x;

Y’ = y;

可以知道下一个新的X值会是目前X的两倍,而Y保持不变,在一开始已经说了a的变化会影响宽度,那么出来的形状就是宽度为现有的两倍了。

在Matrix中还有几个基本函数可以控制,所以也可以不用一直重新定义Matrix类,那就是

Matrix.scale(a,d);

Matrix.translate(tx1, ty2); //这里的tx1和ty1是所要递增或递减原有tx和ty的数值

Matrix.rotate(弧度); //弧度就是 (角度/ 180)* Math.PI

基本上只要代入公式就可以得到答案,所以我只说明rotate函数的计算

Math.rotate((50/180)*Math.PI) //这里是要求旋转 50 度

公式为:

X’ = cos(a)*X + sin(c)*Y + tx;

Y’ = -sin(b)*X + cos(d)*Y + ty;

X’ = cos(50)*X + sin(50)*Y + tx;

Y’ = -sin(50)*X + cos(50)*Y + ty;

X’ = 0.64*X + 0.76*Y + tx;

Y’ = -0.76*X + 0.64*Y + ty;

得到的这个答案再把现有坐标x和y代入就可以求出新坐标了

那么我们来验证a,b,c,d的数值是否正确吧,打开一个新的场景,在帧上输入

import flash.geom.Matrix;

var myMatrix:Matrix = new Matrix();

myMatrix.rotate((50/180)*Math.PI);

trace(myMatrix.toString()); //看看当中的a,b,c,d是不是也是这个数值呢?

好啦。。到了最后的部分也就可以完结这篇教程了,最重要的一点也是很多人百思不解的问题是:

求出一个X和Y,为何会能够让元件转动呢?这只是一个坐标啊??最多也只是控制坐标点,怎么那么神奇??

这点就是Flash提供的方便了,其实为何需要配合Transform的关键就是在此,Transform指定了元件之后会得到4个角的坐标。所以我们使用Transform.matrix函数就是让transform把Matrix的公式代入每个角的坐标。

所以公式中的x和y就是每个角的坐标,坐标代入公式就直接取得了新的坐标值而达到旋转变形等的功能。这是不是简单化了很多呢??总比在之前版本还要自己定义函数。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有