用Vector类作仿3D的flash动画
作者:麦长芳
引言
严格来说,这不是一篇教程,这篇文章的旨在目的是向还没有接触过Vector类的闪友介绍、推荐Vector类,利用它的方便,简洁以及它的强大功能作出更加完美的动画,特别是模仿3D的动画,说到Vector类,必须说到一个人——Robert Penner,是他在《Flash Mx编程与创意实现》一书中为它赋予了生命与灵魂(我是这么认为的)(先声明这不是做广告)。这本书在几年前就出版了,应该很多闪友已经看过了,我是在几个月前才知道和看到的(有点井底之蛙,可别取笑我),当我看到其中的Vector类时,眼前确实一亮,我是一名高中物理教师,学过高中物理的闪友都知道矢量在高中物理中的份量,所以我花了大概两天时间,把其中的矢量类部分认真输入电脑几遍,并好好体会了它的实现方法,同时试做了几个常见的动画,等一下我会详细介绍,我会把我输的书本的部分代码贴出来,供共同研究,由于我也是新手,有许多可能是自以为是的地方,希望读者谅解,可别扔东西哦。
正文
读者可以先看第一个例子:
[url=http://www.flash8.net/fla/4822.shtml]
[color="#003366"]http://www.flash8.net/fla/4822.shtml[/color]
[/url]
,怎样,还是比较逼真吧。让我们先看一下它的代码:
Vector = function (x, y, z) {
this.x = x;
this.y = y;
this.z = z;
};
//构造一个矢量类Vector,它包含3个属性x、y、z
Vector.prototype.rotateXYZ = function(a, b, c) {
var sa = Math.sin(a*Math.PI/180), ca = Math.cos(a*Math.PI/180);
var sb = Math.sin(b*Math.PI/180), cb = Math.cos(b*Math.PI/180);
var sc = Math.sin(c*Math.PI/180), cc = Math.cos(c*Math.PI/180);
with (this) {
//绕x轴
var ry = y*ca-z*sa;
var rz = y*sa+z*ca;
//绕y轴
var rx = rz*sb+x*cb;
z = rz*cb-x*sb;
//绕z轴
x = rx*cc-ry*sc;
y = rx*sc+ry*cc;
}
};
/*类Vector的方法,该方法是使矢量绕x、y、z轴分别以a、b、c的
角度增量旋转,作3D动画必需的方法,可以参考数学矢量的旋转*/
Vector.prototype.getSee = function(ViewDist) {
if (ViewDist == undefined) {
ViewDist = 300;
}
return ViewDist/(ViewDist+this.z);
};
//获得矢量透视度的方法,返回值是一个随z的增大而减小的值,可参看透视学
Vector.prototype.cast = function(p) {
if (p == undefined) {
p = this.getSee();
}
with (this) {
return new constructor(x*p, y*p, 0);
本文转自:http://www.5uflash.com/flashjiaocheng/Flashyingyongkaifa/597.html
用Vector类作仿3D的flash动画
最新推荐文章于 2024-08-23 08:26:06 发布