Flash AS3制作交互式3D旋转动画效果_Flash教程-查字典教程网
Flash AS3制作交互式3D旋转动画效果
Flash AS3制作交互式3D旋转动画效果
发布时间:2015-05-12 来源:查字典编辑
摘要:效果演示:使图标具有交互性:当鼠标单击某个图标时使之旋转,并让图标显示在屏幕的最前面。//定义旋转的最终角度varendAngle:Numb...

 效果演示:

使图标具有交互性:

当鼠标单击某个图标时使之旋转,并让图标显示在屏幕的最前面。

//定义旋转的最终角度

var endAngle:Number = 90;

//保存已经旋转的角度

var tempAngle:Number = 0;

//保存旋转的状态

var isRotating:Boolean = true;

//注册图标的单击事件

mc.addEventListener(MouseEvent.MOUSE_DOWN,startRotation);

//定义侦听器函数

function startRotation(e:MouseEvent):void

{

//得到图标

var currentIcon::MovieClip = e.target;

//得到图标的角度

enaAngle = atan2D(currentIcon.y,cosD(currentIcon.angle) * disy);

//计算旋转的度数

endAngle = (endAngle > -180&&endAngle < -90) ? - 270 - endAngle:90 - endAngle;

//单击后旋转,需要注册enterFrame事件侦听器

menu.addEventListener(Event.ENTER_FRAME,moveMenu);

}

每次旋转前要重新初始化旋转角度

function initAngle(b:Boolean)

{

//如果处于旋转状态保存角度

if (isRotating)

//保存图标角度

tempAngle += speed;

//旋转速度重新设置为0

speed = 0;

//设置旋转状态

isRotating = b;

}

修改函数moveMenu():

function moveMenu(e:Event):void

{

var iconCount:int = menu,numChildren;

var depthArrat: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的动态属性中

mc.angle = tempAngle + speed + angle * z;

mc.x = cosD(mc.angle) * disy;

mc.y = sinD(mc.angle) * disy;

depthArray[z] = mc;

setProp(mc, "alpha");

setProp(mc, "scaleX", .2, .7);

setProp(mc, "scaleY", .2, .7);

}

arrange(depthArray);

//利用缓冲公式把图标旋转到endAngle角度

speed += (endAngle - speed) * .2;

if (Math.abs(speed - endAngle) < 1)

{

//移除事件侦听器

menu.removeEventListener(Event.ENTER_FRAME,moveMenu);

initAngle(false);

}

}

下面给出完整代码

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

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

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;

}

相关阅读
推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  • 最新Flash教程学习
    热门Flash教程学习
    网页设计子分类