5.2 地圖編輯系統
5.2.6 整合
所有的基本設定都完成之後,就可以把它們全部拼成一張完整的 地圖了。我們在此使用一個收集地圖所有相關資訊的文件檔,如圖 5-31,把該有的元件、資料全部紀錄在其中,之後系統只要從這個文 件檔中獲得編輯地圖所需的資訊,就可以把一張完整的地圖呈現出
簡易3D多人線上遊戲系統
圖 5-31 地圖資訊文件檔
各欄位資訊分別為:
¾ Size
代表這張地圖的大小,256 就表示這張地圖地大小是 256*256 格 的正方形。
¾ SeeRange
表示可視範圍。我們設定系統在繪圖的時候,只會畫出以主角為 中心的某一個範圍內的畫面。這樣可以大量減少繪圖晶片記憶體的使 用量,使的繪圖系統只需處理一部分的畫面,而不是任何時間都必須
處理整張地圖的所有顯示資訊。
¾ SelectModeRange
設定滑鼠可以點選到的移動最大範圍。雖然可以擴張到無限大,
¾ TextureBase2
地表材質貼圖,跟地面色彩分布圖重疊貼在地表上。
¾ HeightBitName
地形高度圖,紀錄地形高低的.raw 圖檔。
6. MoveZ:Z 方向位移
7. AlphaFlag:文字貼圖旗標 8. EndSet:結束設置
¾ CreateObject
創造 3d 物件。下面的屬性分別是:
11. SpeedTime:旋轉更新頻率
12. ActionFlagX:X 方向旋轉功能開啟旗標 13. ActionFlagY:Y 方向旋轉功能開啟旗標 14. ActionFlagZ:Z 方向旋轉功能開啟旗標 15. EndSet:結束設置
以上是地圖資訊文件檔的基本形式。整個地圖編輯系統最後最重 要的動作,就是讀入地圖資訊文件檔,然後把我們精心設計的地圖完 整的呈現在螢幕上。所有的地圖資訊、元件大致可分類為三個階層,
如圖 5-32 所示:
圖 5-32 地圖元件的三個層次
所有的元件全都合在一起之後,ㄧ張地圖就可以算是初步的大功 告成。不過完成地圖之後還有ㄧ步很重要的動作,那就是先自我測 試,看看地圖有沒有什麼玩起來不流暢的地方:比如說從某一點到另 一點的距離太長,但卻又是劇情的必經之路等。
測試後確定沒有問題,便完成了一張完整的地圖,可再著手設計 下一張地圖。等到所有的地圖皆完成後,再將它們用傳點全部串連起
簡易3D多人線上遊戲系統
5.3 2D 人物動作貼圖
貼圖的技術,就程式方面來說,我們使用 OpenGL 中的 glBegin 和 glEnd 這兩個成對的函式來指定多組座標點來組合 OpenGL 中的元 件 , OpenGL 的 元 件 形 態 有 很 多 種 , 如 GL_POINTS( 用 來 畫 點 ) 、 GL_LINES(用來畫線)、及 GL_TRIANGLES(用來畫三角形)等,基於現 在的顯示卡都有對畫三角形元件來加速,所以我以兩個三角形組成一 個正方形當框架來貼圖。
OpenGL 三角形的元件有一個進階的形態 GL_TRIANGLES_STRIP 可 以 用 更 少 個 點 來 畫 出 兩 個 三 角 形 。 以 下 為 這 兩 者 的 差 別 , GL_TRIANGLES 必 須 指 定 六 個 才 能 畫 出 兩 個 三 角 形 , 而 GL_TRIANGLES_STRIP 的前三個點為第一個三角形,當再指定第四個 點的時後,第四個就會跟前兩個點組成第二個三角形,這樣就明顯地
少了二個點,當三角形的個數一多,所少的點數也是很可觀的。
有了框架之後,就可以指定貼圖材質的範圍,而 glTexCoord2f 的函式就是用來指定。glTexCoord2f(s,t)有兩個參數 s 為材質水平 座標;t 為材質垂直座標,其一張材質圖的範圍值以 0~1 為表示
做完前面的準備之後,再來就只要用 glBindTexture 的函式來指 定該貼那一張圖,將上述的連續動作圖片依序貼出來,就完成了。
接下來,就會發現一個問題,之前有說明過一種怪物的動作圖的 材質基本上就會有 200 張,如果一個地圖上 10 隻怪物同時出現,那 就必須載入 2000 張,這樣所佔的記憶體空間,實在太大了,這就需 要一個材質管理系統來掌管這些材質,讓同一種怪物只要載入一次圖 庫就行了,其他的就共同。所以每當物件管理系統創造一隻怪物的時 後,就必須先寫一張材質申請表給材質管理系統,材質管理系統就會 先尋找之前是否已經申請過了,申請過就不會再載入,反之就載入。
最後都在申請書個數上加一,整個材質管理系統流程圖如圖 5-34 所 示。
簡易3D多人線上遊戲系統
圖 5-34 材質管理系統流程圖