MANGOS中的地圖管理
從蚊子叮blog上轉(zhuǎn)載的,但是這兒是老家。
這里所說的地圖管理是指服務(wù)器端的地圖管理以及地圖上的對象管理。
在魔獸中,一組服務(wù)器為一個世界,一個世界內(nèi)同時(shí)存在著多個游戲場景,如東部王國,卡利姆多,監(jiān)獄副本,戰(zhàn)場等。每個游戲場景都對應(yīng)著一幅地圖,但一幅地圖卻并不一定能確定一個場景,這是因?yàn)橛懈北镜拇嬖凇T谝粋€場景地圖里,還會分區(qū)域,比如東部王國里會有艾爾文森林區(qū)域、西部荒野區(qū)域等。
從wow客戶端的adt及wdt數(shù)據(jù)里可以大致了解到地圖相關(guān)數(shù)據(jù)。每張地圖最多有64*64個格子【重劍注:看了下朝哥的worldEditor,果然是左下角(0,0)右上角(63,63) 】,每個格式大小為533.33333*533.33333(即1600/3,為什么設(shè)定成這個數(shù)字?)除了東部王國和卡利姆多外,大部分的地圖都比較小,不會真正占用這么多個格子。每個格子用一個adt文件來描述其詳細(xì)信息,另外有一個wdt文件來指出該地圖中哪些編號的格子存在。
再來看mangos中是如何表示這種結(jié)構(gòu)的。一張地圖就是一個Map對象,對于可以創(chuàng)建出多個場景的副本地圖,多個副本也就對應(yīng)著多個Map對象,里面記錄了當(dāng)前管理的是哪個副本,另外再有一個MapInstanced組件來維護(hù)副本地圖列表。地圖內(nèi)分成的64*64的格子,每個格子的信息包括區(qū)域標(biāo)志、地形類型、水位層級和高度數(shù)據(jù),用GridMap結(jié)構(gòu)體來表示,由Map來維護(hù)這個GridMap二維數(shù)組。另外Map內(nèi)還維護(hù)了該地圖內(nèi)所有的WorldObject和GridObject列表,當(dāng)然也是以Grid為單位來保存。
由于一個Grid的實(shí)際大小為533*533,其范圍還是非常大的,一般玩家也不需要關(guān)注這么大范圍內(nèi)的所有對象,所以mangos又將一個Grid分為了8*8個Cell,每個對象都同時(shí)關(guān)注當(dāng)前所在Cell及周圍的八個Cell內(nèi)的對象。這種劃分格子來管理地圖區(qū)域的方法在以前基于TILE的2D游戲中差不多為最通用的方法。
現(xiàn)在的服務(wù)器地圖有些也引入了客戶端場景管理的方法,使用四叉樹、八叉樹的方式,云風(fēng)與地圖管理有關(guān)的兩篇文章可以看一下:
http://blog.codingnow.com/2006/10/quadtree.html
http://blog.codingnow.com/2006/12/collision.html
posted on 2009-05-05 15:01
七星重劍 閱讀(1992)
評論(5) 編輯 收藏 引用 所屬分類:
Game Engine