Flash的AS3代码制作交互式3D旋转动画效果
作者 佚名技术
来源 服务器技术
浏览
发布时间 2012-07-07
本例为Flash AS3代码实例教程,教程讲解了通过用AS3制作交互式3D旋转动画效果,希望通过本教程的学习,能给朋友们带来帮助~~ 效果演示: 〖本教程是3D旋转的升级版,添加交互性。前一部分的制作请参看3D旋转教程,版本AS3.0〗 使图标具有交互性: 当鼠标单击某个图标时使之旋转,并让图标显示在屏幕的最前面。 //定义旋转的最终角度 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); } } 下面给出完整代码 1. include "Math2.as" 2. stage.frameRate = 30; 3. 4. var disx:Number = 200; 5. var disy:Number = 10; 6. var speed:Number = 0; 7. 8. var endAngle:Number = 90; 9. var tempAngle:Number = 0; 10. var isRotating:Boolean = true; 11. 12. var menu:Sprite = new Sprite(); 13. menu.x = 300; 14. menu.y = 200; 15. menu.addEventListener(Event.ENTER_FRAME,moveMenu); 16. this.addChild(menu); 17. 18. initMenu(5); 19. function initMenu(n:int) { 20. for (var i:int; i<n; i++) { 21. var mc:MovieClip = new IconMenu(); 22. mc.scaleX = mc.scaleY = .5; 23. mc.addEventListener(MouseEvent.MOUSE_DOWN,startRotation); 24. menu.addChild(mc); 25. } 26. } 27. function initAngle(b:Boolean) { 28. if (isRotating) { 29. tempAngle += speed; 30. } 31. speed = 0; 32. isRotating = b; 33. } 34. function startRotation(e:MouseEvent):void { 35. var currentIcon:MovieClip = e.target; 36. endAngle = atan2D(currentIcon.y,cosD(currentIcon.angle)*disy); 37. endAngle = (endAngle> -180&&endAngle < -90)? -270 - endAngle:90 - endAngle; 38. initAngle(t |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
关于Flash的AS3代码制作交互式3D旋转动画效果的所有评论