製作3D旋轉動畫效果Flash教程

才智咖 人氣:1.35W

本教程著重於程式碼的編寫,版本AS 3.0。只要製作一個旋轉的'3D球,圖形元件的製作不作講解,請參看有關教程。

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

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

//根據深度獲取圖示

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 文件儲存在同一目錄下,進行測試。

TAGS:3D 動畫 FLASH