1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > Flash AS3制作交互式3D旋转动画效果

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

时间:2022-05-16 11:20:43

相关推荐

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

下面是个Flash AS3制作交互式3D旋转动画效果教程,撑握了其技术要点,学起来就简单多了。赶紧跟着小编一起来看看吧!

效果演示:

使图标具有交互性:

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

//定义旋转的最终角度

var = 90;

//保存已经旋转的角度

var = 0;

//保存旋转的状态

var = 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 = 90;

var = 0;

var = 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; in; 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; ziconCount; 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;

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。