导航

Flash AS3.0教程:制作3D旋转动画效果

时间:2009-09-01    来源:中国教程网论坛    作者:cao4811    点击:
本教程着重于代码的编写,版本AS 3.0。只要制作一个旋转的3D球,图形元件的制作不作讲解,请参看有关教程。

 

 include "Math2.as"
//图片容器
var menu:Sprite=new Sprite();
//使图标移动
menu.x = 300;
menu.y = 200;
//注册事件侦听器
menu.addEventListener(Event.ENTER_FRAME,moveMenu);
this.addChild(menu);
//椭圆在x 和y 轴上的截距
var disx:Number = 200;
var disy:Number = 10;
//旋转速度
var speed:Number = 0;
initMenu(5);
function initMenu(n:int) {
        for (var i:int; i<n; i++) {
                var mc:MovieClip = new IconMenu();
                //缩小图标
                mc.scaleX = mc.scaleY = .5;
                menu.addChild(mc);
        }
}
//事件侦听器函数
function moveMenu(e:Event):void {
        //获取图标数
        var iconCount:int = menu.numChildren;
        //定义数组
        var depthArray:Array = new Array();
        //把360度平分
        var angle:Number = 360 / iconCount;
        for (var z:int; z<iconCount; z++) {
                //根据深度获取图标
                var mc:MovieClip = menu.getChildAt(z);
                //跳转到不同帧,来显示不同的图标
                mc.gotoAndStop(z+1);
                //设置图标的位置
                mc.x = cosD(speed + angle*z) * disx;
                mc.y = sinD(speed + angle*z) * disy;
                setProp(mc,"alpha");
                setProp(mc,"scaleX",.2,.7);
                setProp(mc,"scaleY",.2,.7);
                //保存图标到数组
                depthArray[z] = mc;
        }
        //重新设置图标的深度
        arrange(depthArray);
        speed += 2;
}
function arrange(depthArray:Array):void {
        //按照y坐标排序
        depthArray.sortOn("y", Array.NUMERIC);
        var i:int = depthArray.length;
        while (i--) {
                menu.setChildIndex(depthArray[i], i);
        }
}
function setProp(mc:MovieClip,prop:String,n1:Number = .5, n2:Number = 1):void {
        mc[prop] = ((mc.y + 2 * disy) / disy - 1) / 2 * (n2 - n1) + n1;
}

 

5、新建.as文档,保存名为:Math2.as (这个文档是进行三角函数的计算)

//角度转弧度
function angleToRadian(angle:Number):Number
{
        return angle*(Math.PI/180);
}
//弧度转角度
function radianToAngle(radian:Number):Number
{
        return radian*(180/Math.PI);
}
//计算正弦值
function sinD(angle:Number):Number
{
        return Math.sin(angleToRadian(angle));
}
//计算余弦值
function cosD(angle:Number):Number
{
        return Math.cos(angleToRadian(angle));
}
//计算反正切
function atan2D(y:Number, x:Number):Number
{
        return radianToAngle(Math.atan2(y, x));
}

 把fla文档与Math2.as 文档保存在同一目录下,进行测试。

讨论: http://www.missyuan.com/viewthread.php?tid=417566

加入思缘论坛和大家一起交流,相互学习,共同提高.
相关文章和赞助商广告
赞助商信息
推荐文章
热门文章