接了个mmorpg无缝地图项目。基于一个已经成型的mmorpg自研服务器框架,多个地图分布在不同的进程里,业务互相独立。
        本来打算统一客户端服务端使用同一套地图块加载方案的,不过客户端另做处理了,反正两者不是必须一致,于是服务端我采用了九宫格地图的方式。
        服务端无缝地图,就是按照不同进程管理不同的格子地图块,邻接地图的边缘做跨进程镜像系统,跨边界移动时做数据跨进程数据迁移来实现。
        为了减少复杂度,优先考虑在地图块边沿区域不让怪物进入的设计,当然,这个机制可以扩展为兼容怪物跨地图移动,但时间有限,而且向后兼容,就先(必须)做了玩家(坐骑、宠物)跨地图移动机制。
        无缝地图的复杂点和难点应该就是镜像这里,实现流程,首先要在邻接地图的进程里,做一个本地图进程上的角色的镜像(影子),能把角色的模型,装备,动作等基本表现呈现出来。就是每个地图服务器的地图里,比如九宫格的某个格子地图(进程)A上,当某玩家甲移动到了边缘区域a,那么,对于邻接地图(进程)B,在其边缘区域b里,应该能看到a里面的甲了。虽然地理上甲还是在A里面,但由于进入视野,所以需要在b里面生成甲的镜像乙。
        由于mmorpg,尤其是所谓状态同步的设计,客户端上出现的角色信息,比如使用什么模型,穿什么装备,移动到什么坐标,都是服务端“实时”通知给客户端的。所以要做镜像的视觉呈现,只需要往B里也发送相同的一份相关信息就基本上可以了。
        但是到了这一步,镜像还只是纯影子,还没有互动能力。
        那么第二步,就要做镜像的互动功能了。
        要传递攻击。因为在b里面的乙,如果玩家丙能和乙互动,那么可知,丙也有镜像丁出现在a里面(因为战斗等互动的范围,必须小于可视范围),如果是玩家甲攻击玩家丙,那么在进程范畴里,则是玩家甲攻击镜像丁,或者说镜像乙攻击玩家丙。那么是把丁接受的攻击传递给丙,还是把甲的攻击行为传递给镜像乙呢,可以选其中一个。
        然后交易,加好友等其他互动,也可以按照类似的方法跨进程传递。
        我的做法是使用操作系统的跨进程共享内存来实现数据传递。
        
        接下来,就是处理跨地图移动的问题了,我在这里费了点功夫。
        因为跨地图移动,需要进行多进程同步。至少有A B两个地图服务器参与,还加上一个枢纽服务器,那么通信同步,数据库同步。就需要花点功夫来处理了。
        首先必须对原服务器的逻辑流程有充分的了解,然后要做到出入地图的数据库操作原子化串行化。当然,要理清进出服务器的业务流程。        
        因为还要涉及多线程同步,所以这里确实会花一些精力。
        最后,由于跨地图移动,对于客户端来说,现在是一个镜像的消失紧接着一个玩家的创建的过程,由于客户端的位移与服务端一般会有一个插值同步问题,所以会出现一个瞬移现象。那么需要给一些信息给客户端,把这个瞬移处理掉。
        搞了半年,其中还做了2d A*寻路到recast&detour 3d寻路的迁移,还有飞行功能,家族功能,技能系统等内容,目前无缝地图只是是理论完成+初步测试。

mmorpg无缝地图相关推荐

  1. Unity无缝地图研究

    http://blog.csdn.net/libeifs/article/details/6775818 开发环境 Window7 Unity3D3.4 MB525defy   Android 2.2 ...

  2. UE4高级功能--初探超大无缝地图的实现LevelStream

    转:原地址:http://blog.csdn.net/pizi0475/article/details/49004383 UE4高级功能--初探超大无缝地图的实现LevelStream 前言 好吧,这 ...

  3. ue4 无限地图_UE4大地图(流关卡、无缝地图)

    对于UE4来说我只是个菜鸟,研究一下网上的教程稍微尝试的做一下demo,所以可能下面会有描述不准确或者说没解释清的地方请多谅解哈.也非常欢迎指出我说的不对的地方一起学习. 接下来开始教程. UE4的原 ...

  4. MMORPG 地图实现

    网上看一篇关于目前几个流行flash mmorpg地图实现的分析,这里也想说说自己的一些看法. 常见的三种方式: 1.整图 2.Tile元素拼装 3.栅格化切片 整图   整图加载很好理解直接加载一张 ...

  5. 分析flash mmorpg地图的实现

    网上看一篇关于目前几个流行flash mmorpg地图实现的分析,这里也想说说自己的一些看法. 常见的三种方式: 1.整图 2.Tile元素拼装 3.栅格化切片 整图 整图加载很好理解直接加载一张背景 ...

  6. 也谈Flash mmorpg地图问题【转】

    网上看一篇关于目前几个流行flash mmorpg地图实现的分析,这里也想说说自己的一些看法. 常见的三种方式: 1.整图 2.Tile元素拼装 3.栅格化切片 整图 整图加载很好理解直接加载一张背景 ...

  7. 【转】Flash mmorpg地图问题

    网上看一篇关于目前几个流行flash mmorpg地图实现的分析,这里也想说说自己的一些看法. 常见的三种方式: 1.整图 2.Tile元素拼装 3.栅格化切片 整图 整图加载很好理解直接加载一张背景 ...

  8. 【转载】也谈Flash mmorpg地图问题

    作者:闪刀浪子 www.iflashigame.com 网上看一篇关于目前几个流行flash mmorpg地图实现的分析,这里也想说说自己的一些看法. 常见的三种方式: 1.整图 2.Tile元素拼装 ...

  9. 也谈Flash mmorpg地图问题

    常见的三种方式: 1.整图 2.Tile元素拼装 3.栅格化切片 整图 整图加载很好理解直接加载一张背景图.这种方式比较适合小场景(面积不要超过两屏),例如可以用来做悦来客栈.家里的菜园子或者王员外的 ...

  10. 论MMORPG游戏服务器架构

    就我见到过的MMO服务器架构做一个总结吧. 第一种,靠一个matchmaking服务器来做负荷均衡,这种架构比较适合大厅游戏或者副本游戏.方法是用一个服务器作为登陆服务器,所有玩家请求连接的要求都被该 ...

最新文章

  1. keras构建前馈神经网络(feedforward neural network)进行多分类模型训练学习
  2. 腾讯99公益日︱深圳市慈善会:那些无力的故事,都拥有了力量
  3. ubuntu c++检测usb口事件变化_拆解报告:美式双USBA口充电插座
  4. 一位合格的博士生需要有哪些条件和素质?
  5. win8能开发android的sdk么,Win8下Android SDK安装与环境变量配置教程
  6. pitr 原理_PostgreSQL基于时间点恢复(PITR)
  7. 【好文链接】从原理上搞懂PID
  8. 【ACL2020】用于改进文本分类的特征投影
  9. 音视频的采集、编码、封包成 mp4 输出
  10. mybatis将字段改为null_【MyBatis入门到入土精讲】MyBatis介绍
  11. “醒着拼”的东鹏饮料发中报,“饮料界茅台”名副其实吗?
  12. 微信小游戏上线字节平台超全攻略
  13. Windows Server 2008之旅??Windows Server Backup功能_闲云野鹤?精神家园_百度空间
  14. Manjaro安装教程及安装后操作
  15. windows大小写,切换键修改lock or shift
  16. 知识图谱可视化vue.js + d3.js
  17. 【ICML2022】可达性约束强化学习
  18. 使用360优化修复系统后无法上网的解决方法
  19. 想成为“牛人”的你,知道这些“壁垒”吗?——论技术壁垒、时间壁垒和成果壁垒
  20. IBM公司沃森系统测评

热门文章

  1. c++国际象棋上的麦粒
  2. 很全的电脑专业术语中英文对照
  3. mysql命令创库创表_MySQL基础创库创表知识
  4. 【P2P网络】磁力链接转换为种子文件 magnet to torrent .
  5. 【网络基础】DDNS - 动态DNS
  6. antony.net
  7. python描述对象静态特性的数据为_对于需要几个单位共同负担的一张原始凭证上的支出,应根据其他单位负担部分为其提高( )。...
  8. Python 【人工智能】【大数据】【全栈】【自动化】技能-张子夜-专题视频课程...
  9. 如何在网页中播放音乐和视频
  10. 算法思考题-三只老鼠找8瓶毒药思路(个人思考+收集)