支持HW团队,就支付宝领取下面的红包吧!(2018年3月31前,就几毛,也会几块,可以和其他红包叠加使用),你领取消费,HW有奖励。红包使用无条件限制,有条件请注意是不是有病毒。

小伙伴们,给大家发红包喽!人人可领,领完就能用。祝大家领取的红包金额大大大!#吱口令#长按复制此消息,打开支付宝就能领取!er1OEj73Uj

登入 注册 | 验证
| 搜索
HelloWorld论坛 : > 计算机科学、技术、教学> 编程专题> 开源免费项目> [转]MANGOS中的地图管理
 
 
 
 
类别:游戏 阅读:3590 评论:0 时间:六月 13, 2013, 6 p.m. 关键字:MaNGOS

 

来源:http://blog.csdn.net/lfhfut/article/details/1908075
这里所说的地图管理是指服务器端的地图管理以及地图上的对象管理。

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

  从wow客户端的adt及wdt数据里可以大致了解到地图相关数据。每张地图最多有64*64个格子,每个格式大小为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

[挂载人]初学MPEG

个人签名--------------------------------------------------------------------------------

Please Login (or Sign Up) to leave a comment