[Flash] 3D Ball

  • 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

Orange - data analysis tool

Installation pip install orange3 Run orange python -m Orange.canvas