include "Math2.as" //圖片容器 var menu:Sprite=new Sprite(); //使圖標移動 menu.x = 300; menu.y = 200; //注冊事件偵聽器 menu.addEventListener(Event.ENTER_FRAME,moveMenu); this.addChild(menu); //橢圓在x 和y 軸上的截距 var disx:Number = 200; var disy:Number = 10; //旋轉速度 var speed:Number = 0; initMenu(5); function initMenu(n:int) { for (var i:int; i<n; i++) { var mc:MovieClip = new IconMenu(); //縮小圖標 mc.scaleX = mc.scaleY = .5; menu.addChild(mc); } } //事件偵聽器函數 function moveMenu(e:Event):void { //獲取圖標數 var iconCount:int = menu.numChildren; //定義數組 var depthArray:Array = new Array(); //把360度平分 var angle:Number = 360 / iconCount; for (var z:int; z<iconCount; z++) { //根據深度獲取圖標 var mc:MovieClip = menu.getChildAt(z); //跳轉到不同幀,來顯示不同的圖標 mc.gotoAndStop(z+1); //設置圖標的位置 mc.x = cosD(speed + angle*z) * disx; mc.y = sinD(speed + angle*z) * disy; setProp(mc,"alpha"); setProp(mc,"scaleX",.2,.7); setProp(mc,"scaleY",.2,.7); //保存圖標到數組 depthArray[z] = mc; } //重新設置圖標的深度 arrange(depthArray); speed += 2; } function arrange(depthArray:Array):void { //按照y坐標排序 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; } |
5、新建.as文檔,保存名為:Math2.as (這個文檔是進行三角函數的計算)
//角度轉弧度 function angleToRadian(angle:Number):Number { return angle*(Math.PI/180); } //弧度轉角度 function radianToAngle(radian:Number):Number { return radian*(180/Math.PI); } //計算正弦值 function sinD(angle:Number):Number { return Math.sin(angleToRadian(angle)); } //計算余弦值 function cosD(angle:Number):Number { return Math.cos(angleToRadian(angle)); } //計算反正切 function atan2D(y:Number, x:Number):Number { return radianToAngle(Math.atan2(y, x)); } |
把fla文檔與Math2.as 文檔保存在同一目錄下,進行測試。
討論: http://www.missyuan.com/viewthread.php?tid=417566