欢迎来到山村网

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

2019-03-31 07:15:11浏览:1003 来源:山村网   
核心摘要:  效果演示:  使图标具有交互性:  当鼠标单击某个图标时使之旋转,并让图标显示在屏幕的最前面。  //定义旋转的最终角

  效果演示:

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

  使图标具有交互性:

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

  //定义旋转的最终角度

  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;

  }

(责任编辑:豆豆)
下一篇:

Dreamweaver CS6怎样才能开发HTML5?

上一篇:

Dreamweaver制作超链接方法步骤

  • 信息二维码

    手机看新闻

  • 分享到
打赏
免责声明
• 
本文仅代表作者个人观点,本站未对其内容进行核实,请读者仅做参考,如若文中涉及有违公德、触犯法律的内容,一经发现,立即删除,作者需自行承担相应责任。涉及到版权或其他问题,请及时联系我们 xfptx@outlook.com