有人会问了:Flash在开发之初为了减小播放器的体积,并没有设置关于3D方面的应用.其实不然,所有的3D效果其实都是二维图形通过3D算法得出的.
下面让我们通过3D算法来做一个简单的3D导航.
1.新建一个按钮实例,将其在库中的链接命名为"text"
2.在按钮实例的第一帧输入如下代码:
// 设定角度和弧度变量 var radian:Number = 0 ; // 圆心座标(x和z的中心点) var centerX:Number = Stage.width / 2 - 40 ; var centerY:Number = Stage.height / 2 - 20 ; // var r:Number = 100 ; // 半径值 var z:Number; // z轴值(公式里的d2) var d1:Number = 50 ; // 眼睛到屏幕的距离 var scale:Number; // 透视缩放比率 var y:Number; // var rotation:Number = 0 ; // 当前旋转的角度 function onEnterFrame() ... { degree += _root.speed; // 换算成弧度 radian = degree*(Math.PI/180); // 求出x, z'值 this._x = Math.cos(radian)*r+centerX; z = Math.sin(radian)*r+this._parent.centerZ; scale = d1/(d1+z); this._y = y*scale+centerY; this._xscale = scale*100; this._yscale = scale*100; this._alpha = scale*100; //// //切换深度 if (scale>0.8) ...{ this.swapDepths(20); this.enabled = true; this.k.enabled = true; } else ...{ this.swapDepths(this.defaultDep); this.enabled = false; this.k.enabled = false; }} this .onMouseMove = function () ... { y = (centerY-_root._ymouse)/3;} ;
4.在时间轴第一帧输入以下代码
var speed:Number = 4 ; var center:Number = Stage.width / 2 ; var maxSpeed:Number = 6 ; var unit:Number = center / maxSpeed; // var centerZ:Number = 90 ; // for ( var i = 0 ; i < 6 ; i ++ ) ... { this.attachMovie("text", "t"+i, i+10); this["t"+i].degree = i*60; this["t"+i].defaultDep = i+10; this["t"+i]._y = Stage.height/2;} function onMouseMove() ... { speed = Math.round((_xmouse-center)/unit)*-1;}
好了,测试一下吧!