让我们用Flash做3D动画

来源:互联网 发布:程序员bug致损失400亿 编辑:程序博客网 时间:2024/05/02 00:20

有人会问了: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;
}


 

好了,测试一下吧!

原创粉丝点击