日期:2013-11-23  浏览次数:20808 次

下面就让我来具体阐述一下这些3D类的用法。
留意,首先得保证这些类文件和你的fla文件在同一子目录下或者在publishing settings里面做了
相应的类文件添加,否则实例不会成功。

首先要向大家引见的是TVector3D这个类。
今天的这部分内容可能要求您有点向量的知识,而且比起当前的略显单调和缺乏实用性。 缺乏足够的耐性和暂时不想学习向量知识的人可以略过。
表达能力或许欠佳,望海涵。
3dclasses.rar
每一个TVector3D类的实例,表示的是一个3D空间的向量,因此它是三维的。我们用三元组(x,y,z)表示它们,因此每个TVector3D类的实例有3个属性,分别是x,y和z。
申请一个新的TVector3D类实例的方法是:
var 你的变量名 = new TVector3D(x的值,y的值,z的值);

举例:
var v = new TVector3D(1,1,1);//v如今是一个表示向量(1,1,1)的TVector3D实例。
然后,让我们看看TVector3D提供哪些重要的方法。
1.printf()
printf是用trace向output窗口以三元组的方式输出此向量,无需参数。
举例:
var v = new TVector3D(1,1,1);
v.printf(); 
运转当前,你会发如今output窗口里面输出了(1,1,1);
这个方法普通在 调试程序 的时候使用。
注:千万不要让你的眼睛受欺骗: 如果某个数为1.4342e-15或者5.45561234234142e-17,要记住,这就是0,而非一个不是0的浮点数 !
2.reset()
reset是为这个TVector3D向量重新赋值。
举例:
var v = new TVector3D(1,1,1);
v.reset(2,2,2);
v.printf(); 
运转当前你会发现output窗口输出的是(2,2,2)而不是(1,1,1)

3.getCopy()

getCopy 方法是将该向量本身复制,并传递给另外一个TVector3D向量。
举例:
var v = new TVector3D(1,1,1);
var v1 = new TVector3D(0,0,0);
v1 = v.getCopy();
v1.printf(); 
这时候运转output窗口输出的是(1,1,1)而非(0,0,0);

4.向量运算的方法
(1) plusby
yourVector.plusby(b:TVEctor3D);
向量相加。需求一个参数b,b为与此向量相加的向量。
实例:
var v = new TVector3D(1,2,3);
var v1 = new TVector3D(3,2,1);
v.plusby(v1);
v.printf(); 
运转后输出(4,4,4)

(2)minusby
yourVector.minusby(b:TVector3D);
向量减法。需求一个参数b,b为与此向量相减的向量。
实例:
var v = new TVector3D(4,4,4);
var v1 = new TVector3D(3,2,1);
v.plusby(v1);
v.printf(); 
运转后输出(1,2,3) 
(3)realmulby
yourVector.realmulby(k:Number);
和实数相乘。需求一个参数k,k为与此向量相乘的实数(Number)。
实例:
var v = new TVector3D(1,4,2);
v.realmulby(2);
v.printf(); 
运转后输出(2,8,4)

(4)dotproby

yourVector.dotproby(b:TVector3D):Number;
向量点乘。需求一个参数b,b为与此向量点乘的向量。有前往值,为实数(Number)。
实例:
var v = new TVector3D(1,2,3);
var v1 = new TVector3D(3,2,1);
var r:Number = v.dotproby(v1);
trace(r); 
运转后输出 10

(5)crosspro
TVector3D.crosspro(a,b:TVector3D):TVector3D;
向量叉乘。静态方法。需求两个参数a和b,a和b为与需求作叉乘的向量。有前往值,为

TVector3D向量。
在此,让我们看一下静态方法与以上方法的差别。
其实,我只需求举一个例子。大家用Math类的函数的时候,怎样用?
是了,用如Math.abs()这样。 在这里也一样。对于静态方法,使用TVector3D.方法名()来调用。
实例:
var v = new TVector3D(4,4,4);
var v1 = new TVector3D(3,2,1);
var t = new TVector3D(0,0,0);
t = TVector3D.crosspro(v,v1);
t.printf(); 
运转后输出(-4 , 8 , -4)

5.len2()

yourVector.len2():Number;
前往当前向量的长度的平方。
我们应该认识到,很多时候我们更需求的不是向量的长度,而是它长度的平方。省掉一个耗时的开方运算,何乐而不为呢?
实例:
var v = new TVector3D(1,2,2);
var l:Number = v.len2();
trace(l); 
输出为:9

6.rotate
yourVector.rotate(tx,ty,tz:Number);
这个方法是用来让你的向量绕某个坐标轴旋转,留意,是某个。
普通的,tx,ty,tz三个参数分别是绕相应的轴旋转的角度,其中普通至少有两个为0,也就是说,不要用同一次调用rotate方法来绕两个或三个轴旋转,如果要那样,应该分两或者三次调用。
tx,ty,tz使用角度制。
实例:
var v = new TVector3D(1,0,0);
v.rotate(0,90,0);//绕y轴旋转90度。
v.printf(); 
输出:(0,0,-1)

使用教程2

TParitcle3D.as粒子类。
这个实际上是robert penner的书上所提供的一个类。
剖析一下这个类先: