随笔 - 505  文章 - 1034  trackbacks - 0
<2008年11月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456


子曾经曰过:编程无他,唯手熟尔!

常用链接

留言簿(94)

随笔分类(649)

随笔档案(505)

相册

BCB

Crytek

  • crymod
  • Crytek's Offical Modding Portal

Game Industry

OGRE

other

Programmers

Qt

WOW Stuff

搜索

  •  

积分与排名

  • 积分 - 905240
  • 排名 - 14

最新随笔

最新评论

阅读排行榜

评论排行榜

MANGOS中的地图管理 
从蚊子叮blog上转载的,但是这儿是老家。

这里所说的地图管理是指服务器端的地图管理以及地图上的对象管理。

在魔兽中,一组服务器为一个世界,一个世界内同时存在着多个游戏场景,如东部王国,卡利姆多,监狱副本,战场等。每个游戏场景都对应着一幅地图,但一幅地图却并不一定能确定一个场景,这是因为有副本的存在。在一个场景地图里,还会分区域,比如东部王国里会有艾尔文森林区域、西部荒野区域等。

从wow客户端的adt及wdt数据里可以大致了解到地图相关数据。每张地图最多有64*64个格子【重剑注:看了下朝哥的worldEditor,果然是左下角(0,0)右上角(63,63) 】,每个格式大小为533.33333*533.33333(即1600/3,为什么设定成这个数字?)除了东部王国和卡利姆多外,大部分的地图都比较小,不会真正占用这么多个格子。每个格子用一个adt文件来描述其详细信息,另外有一个wdt文件来指出该地图中哪些编号的格子存在。

再来看mangos中是如何表示这种结构的。一张地图就是一个Map对象,对于可以创建出多个场景的副本地图,多个副本也就对应着多个Map对象,里面记录了当前管理的是哪个副本,另外再有一个MapInstanced组件来维护副本地图列表。地图内分成的64*64的格子,每个格子的信息包括区域标志、地形类型、水位层级和高度数据,用GridMap结构体来表示,由Map来维护这个GridMap二维数组。另外Map内还维护了该地图内所有的WorldObject和GridObject列表,当然也是以Grid为单位来保存。

由于一个Grid的实际大小为533*533,其范围还是非常大的,一般玩家也不需要关注这么大范围内的所有对象,所以mangos又将一个Grid分为了8*8个Cell,每个对象都同时关注当前所在Cell及周围的八个Cell内的对象。这种划分格子来管理地图区域的方法在以前基于TILE的2D游戏中差不多为最通用的方法。

现在的服务器地图有些也引入了客户端场景管理的方法,使用四叉树、八叉树的方式,云风与地图管理有关的两篇文章可以看一下:

http://blog.codingnow.com/2006/10/quadtree.html

http://blog.codingnow.com/2006/12/collision.html

posted on 2009-05-05 15:01 七星重剑 阅读(1981) 评论(5)  编辑 收藏 引用 所属分类: Game Engine

FeedBack:
# re: MANGOS中的地图管理 2009-05-06 23:29 Davy.xu
每每看到感兴趣的内容大部分都是在重剑的空间,感慨感慨

最近刚看mangos,希望和贵兄一道分析  回复  更多评论
  
# re: MANGOS中的地图管理 2009-05-08 17:56 七星重剑
@Davy.xu
臭味相投啊 ^_^  回复  更多评论
  
# re: MANGOS中的地图管理 2009-06-02 22:27 xoyojank
搞服务器去了么-_-  回复  更多评论
  
# re: MANGOS中的地图管理 2009-06-04 14:19 七星重剑
@xoyojank
非也非也  回复  更多评论
  
# re: MANGOS中的地图管理 2009-10-16 10:16 getmangos
" 每个格子用一个adt文件来描述其详细信息,另外有一个wdt文件来指出该地图中哪些编号的格子存在。"


你说的是客户端吧,mangos里的地图都是 .map文件
  回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理