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

编辑Tag赚U币
教程Tag:暂无Tag,欢迎添加,赚取U币!

推荐:Flash cs3鼠绘教程:动画技巧之绘制猴子
猴子 效果演示: 讨论: http://www.missyuan.com/viewthread.php?tid=417576 写实效果的关键在阴影中。同样的2.5D 动画技巧在这儿被使用,不过这次绘制的一个渐变图形加强了一个更加令人满意的三维效果。 1. 首先在第一帧放入角色的四分之三的角度。让我们把它叫做A点

   效果演示:

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;

  }

分享:Flash教程:交换方法制作嘴型吻合
嘴型吻合(交换方法) 进入论坛参与讨论:http://www.missyuan.com/viewthread.php?tid=417579 正确的口型吻合是一门艺术。它是一个制作角色说话录音的艺术。这个技术涉及到与会话相吻合的各种嘴型。这个技术同样也很耗费时间,尤其在你的对话非常长的时候。你可以是一个

来源:模板无忧//所属分类:Flash教程/更新时间:2014-10-10
相关Flash教程