PS设计教程网欢迎你!

Flash AS3制作交互式3D旋转动画效果(2)

文章来源于 中国教程网论坛,感谢作者 cao4811 给我们带来经精彩的文章!
设计教程/设计教程/Flash教程2009-09-09
下面给出完整代码 include Math2.as stage.frameRate = 30; var disx:Number = 200; var disy:Number = 10; var speed:Number = 0; var endAngle:Number = 90; var tempAngle:Number = 0; var isRotating:Boolean

下面给出完整代码

include "Math2.as"
stage.frameRate = 30;

var disx:Number = 200;
var disy:Number = 10;
var speed:Number = 0;

var endAngle:Number = 90;
var tempAngle:Number = 0;
var isRotating:Boolean = true;

var menu:Sprite = new Sprite();
menu.x = 300;
menu.y = 200;
menu.addEventListener(Event.ENTER_FRAME,moveMenu);
this.addChild(menu);

initMenu(5);
function initMenu(n:int) {
        for (var i:int; i<n; i++) {
                var mc:MovieClip = new IconMenu();
                mc.scaleX = mc.scaleY = .5;
                mc.addEventListener(MouseEvent.MOUSE_DOWN,startRotation);
                menu.addChild(mc);
        }
}
function initAngle(b:Boolean) {
        if (isRotating) {
                tempAngle += speed;
        }
        speed = 0;
        isRotating = b;
}
function startRotation(e:MouseEvent):void {
        var currentIcon:MovieClip = e.target;
        endAngle = atan2D(currentIcon.y,cosD(currentIcon.angle)*disy);
        endAngle = (endAngle> -180&&endAngle < -90)? -270 - endAngle:90 - endAngle;
        initAngle(true);
        menu.addEventListener(Event.ENTER_FRAME,moveMenu);
}
function moveMenu(e:Event):void {
        var iconCount:int = menu.numChildren;
        var depthArray:Array = new Array();
        var angle:Number = 360 / iconCount;
        for (var z:int; z<iconCount; z++) {
                var mc:MovieClip = menu.getChildAt(z);
                mc.gotoAndStop(z + 1);
                mc.angle = tempAngle + speed+angle * z;
                mc.x = cosD(mc.angle) * disx;
                mc.y = sinD(mc.angle) * disy;
                depthArray[z] = mc;
                setProp(mc,"alpha");
                setProp(mc,"scaleX",.2,.7);
                setProp(mc,"scaleY",.2,.7);
        }
        arrange(depthArray);
        speed += (endAngle-speed) * .2;
        if (Math.abs(speed - endAngle) < 1) {
                menu.removeEventListener(Event.ENTER_FRAME,moveMenu);
                initAngle(false);
        }
}
function arrange(depthArray:Array):void {
        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;
}

版权所有PS设计教程网公安备案:苏公网安备 32058302001023号工信部备案:沪ICP备09005587号
aaa