- 3D Ball
Download:3DBall.zip
對於許多Flash設計者來說,3D設計一直是設計者感到缺憾的地方,雖然到目前為止Flash CS3依舊是2D座標繪圖系統,但我們還是可以透過一些小技巧製造出3D的效果。以下是我的虛擬座標系統:
我們自行定義了z axis,才足以構成3D Coordinate。
以下程式片段介紹僅講核心部份,可以看到程式碼35~36是直接對著ball_mc的x,y數值做更新,而z軸則是一個變數,球體的放大縮小由我們自行建立的z軸數值做放大比例依據。解主要的核心程式碼:
function motion():Void {
_root.ball_mc._x += x_dir*xSpeed;
_root.ball_mc._y += y_dir*ySpeed;
_z += z_dir*zSpeed;
_root.ball_mc._xscale = ballScale-ballScale/100*50*_z/stageDepth;
_root.ball_mc._yscale = ballScale-ballScale/100*50*_z/stageDepth;
if (_root.ball_mc._x>(stageWidth-stageWidth*0.25*_z/stageDepth)-int(ballScale/100*34)) {
x_dir = -1;
}
if (_root.ball_mc._x<0+stageWidth*0.25*_z/stageDepth) {
x_dir = 1;
}
if (_root.ball_mc._y>(stageHeight-stageHeight*0.25*_z/stageDepth)-int(ballScale/100*34)) {
y_dir = -1;
}
if (_root.ball_mc._y<0+stageHeight*0.25*_z/stageDepth) {
y_dir = 1;
}
if (_z<0) {
z_dir = 1;
}
if (_z>stageDepth) {
z_dir = -1;
}
_root.x_txt.text = ball_mc._x;
_root.y_txt.text = ball_mc._y;
_root.z_txt.text = int(_z*10)/10;
}
可以看到motion()一開始是直接對著ball_mc的x,y數值做更新,而z軸則是一個變數,球體的放大縮小由我們自行建立的z軸數值做放大比例依據。
接著的if判斷是在更新球體各分量的速度方向,z軸的部份很單純,只需簡單判斷是否超過我們自訂的邊界即可,但是x與y軸必須隨著z軸去更新他們各自的邊界大小。
最後將各軸的數據輸出到螢幕上顯示即完成我們的motion()函式。
看完之後你會發現似乎3D立體視覺沒有那麼難處裡,但是別忘了目前只是最基本的球體運動,且參考點座標是固定的,一旦要做切換視角的效果時就不是那麼簡單了。
No comments:
Post a Comment