1 FL 教程Flash AS教程:旋轉立方體 周四 3月 03, 2011 6:53 am
Admin
Admin
好,下面開始:
stop();
//這個stop是讓FLASH播放在這一幀停下來,但對代碼的運行沒有影響~其實不用也沒關系
angle=-0.03;
dot_x=Stage.width/2;
dot_y=Stage.height/2;
p=70;
d=300;
//先初始化一下變量~angle是立方體每次轉過的角度,dot_x和dot_y定義了空間的原點,p是立方體邊長的一半,d是眼
//睛距離屏幕的像素
sx=new Array(-p,p,p,-p,-p,p,p,-p);
sy=new Array(-p,-p,-p,-p,p,p,p,p);
sz=new Array(-p,-p,p,p,-p,-p,p,p);
//這三個數組儲存了立方體八個點的實際坐標
tempx=new Array(8);
tempy=new Array(8);
//這兩個數組用來存儲立方體8個點在屏幕上的坐標
function r(){
for(i=0;i temp_x=sx*Math.cos(angle)-sz*Math.sin(angle);
temp_z=sx*Math.sin(angle) sz*Math.cos(angle);
//這個是用來計算立方體在轉動時八個點的坐標
sx=temp_x;
sy=sy;
sz=temp_z;
//要這樣賦值一下~否則立方體會越轉越長
tempx=(sx/(sz d))*d dot_x;
tempy=(sy/(sz d))*d dot_y;
//這個是用來將立方體的實際坐標轉化成屏幕的坐標,不懂的可以參考一下計算機圖形學的書
}
_root.createEmptyMovieClip("lines", 1);
lines.lineStyle(1, 11111111, 100);
lines.moveTo(tempx[0],tempy[0]);
lines.lineTo(tempx[1],tempy[1]);
lines.lineTo(tempx[2],tempy[2]);
lines.lineTo(tempx[3],tempy[3]);
lines.lineTo(tempx[0],tempy[0]);
lines.lineTo(tempx[4],tempy[4]);
lines.lineTo(tempx[5],tempy[5]);
lines.lineTo(tempx[6],tempy[6]);
lines.lineTo(tempx[7],tempy[7]);
lines.lineTo(tempx[4],tempy[4]);
lines.moveTo(tempx[1],tempy[1]);
lines.lineTo(tempx[5],tempy[5]);
lines.moveTo(tempx[2],tempy[2]);
lines.lineTo(tempx[6],tempy[6]);
lines.moveTo(tempx[3],tempy[3]);
lines.lineTo(tempx[7],tempy[7]);
_root.removeMovieClip("lines");
//上面的這一堆東西是用來把算出來的立方體的點用線連起來~其實可以優化一下的
updateAfterEvent();
//更新一下
}
setInterval(r,5);
//每隔5毫秒運行一次函數r
終于寫完了哈
" /> 寫的不好~請見諒`~再發一次效果,嘿嘿 網]
stop();
//這個stop是讓FLASH播放在這一幀停下來,但對代碼的運行沒有影響~其實不用也沒關系
angle=-0.03;
dot_x=Stage.width/2;
dot_y=Stage.height/2;
p=70;
d=300;
//先初始化一下變量~angle是立方體每次轉過的角度,dot_x和dot_y定義了空間的原點,p是立方體邊長的一半,d是眼
//睛距離屏幕的像素
sx=new Array(-p,p,p,-p,-p,p,p,-p);
sy=new Array(-p,-p,-p,-p,p,p,p,p);
sz=new Array(-p,-p,p,p,-p,-p,p,p);
//這三個數組儲存了立方體八個點的實際坐標
tempx=new Array(8);
tempy=new Array(8);
//這兩個數組用來存儲立方體8個點在屏幕上的坐標
function r(){
for(i=0;i temp_x=sx*Math.cos(angle)-sz*Math.sin(angle);
temp_z=sx*Math.sin(angle) sz*Math.cos(angle);
//這個是用來計算立方體在轉動時八個點的坐標
sx=temp_x;
sy=sy;
sz=temp_z;
//要這樣賦值一下~否則立方體會越轉越長
tempx=(sx/(sz d))*d dot_x;
tempy=(sy/(sz d))*d dot_y;
//這個是用來將立方體的實際坐標轉化成屏幕的坐標,不懂的可以參考一下計算機圖形學的書
}
_root.createEmptyMovieClip("lines", 1);
lines.lineStyle(1, 11111111, 100);
lines.moveTo(tempx[0],tempy[0]);
lines.lineTo(tempx[1],tempy[1]);
lines.lineTo(tempx[2],tempy[2]);
lines.lineTo(tempx[3],tempy[3]);
lines.lineTo(tempx[0],tempy[0]);
lines.lineTo(tempx[4],tempy[4]);
lines.lineTo(tempx[5],tempy[5]);
lines.lineTo(tempx[6],tempy[6]);
lines.lineTo(tempx[7],tempy[7]);
lines.lineTo(tempx[4],tempy[4]);
lines.moveTo(tempx[1],tempy[1]);
lines.lineTo(tempx[5],tempy[5]);
lines.moveTo(tempx[2],tempy[2]);
lines.lineTo(tempx[6],tempy[6]);
lines.moveTo(tempx[3],tempy[3]);
lines.lineTo(tempx[7],tempy[7]);
_root.removeMovieClip("lines");
//上面的這一堆東西是用來把算出來的立方體的點用線連起來~其實可以優化一下的
updateAfterEvent();
//更新一下
}
setInterval(r,5);
//每隔5毫秒運行一次函數r
終于寫完了哈
" /> 寫的不好~請見諒`~再發一次效果,嘿嘿 網]