mmorpg无缝地图
接了个mmorpg无缝地图项目。基于一个已经成型的mmorpg自研服务器框架,多个地图分布在不同的进程里,业务互相独立。
本来打算统一客户端服务端使用同一套地图块加载方案的,不过客户端另做处理了,反正两者不是必须一致,于是服务端我采用了九宫格地图的方式。
服务端无缝地图,就是按照不同进程管理不同的格子地图块,邻接地图的边缘做跨进程镜像系统,跨边界移动时做数据跨进程数据迁移来实现。
为了减少复杂度,优先考虑在地图块边沿区域不让怪物进入的设计,当然,这个机制可以扩展为兼容怪物跨地图移动,但时间有限,而且向后兼容,就先(必须)做了玩家(坐骑、宠物)跨地图移动机制。
无缝地图的复杂点和难点应该就是镜像这里,实现流程,首先要在邻接地图的进程里,做一个本地图进程上的角色的镜像(影子),能把角色的模型,装备,动作等基本表现呈现出来。就是每个地图服务器的地图里,比如九宫格的某个格子地图(进程)A上,当某玩家甲移动到了边缘区域a,那么,对于邻接地图(进程)B,在其边缘区域b里,应该能看到a里面的甲了。虽然地理上甲还是在A里面,但由于进入视野,所以需要在b里面生成甲的镜像乙。
由于mmorpg,尤其是所谓状态同步的设计,客户端上出现的角色信息,比如使用什么模型,穿什么装备,移动到什么坐标,都是服务端“实时”通知给客户端的。所以要做镜像的视觉呈现,只需要往B里也发送相同的一份相关信息就基本上可以了。
但是到了这一步,镜像还只是纯影子,还没有互动能力。
那么第二步,就要做镜像的互动功能了。
要传递攻击。因为在b里面的乙,如果玩家丙能和乙互动,那么可知,丙也有镜像丁出现在a里面(因为战斗等互动的范围,必须小于可视范围),如果是玩家甲攻击玩家丙,那么在进程范畴里,则是玩家甲攻击镜像丁,或者说镜像乙攻击玩家丙。那么是把丁接受的攻击传递给丙,还是把甲的攻击行为传递给镜像乙呢,可以选其中一个。
然后交易,加好友等其他互动,也可以按照类似的方法跨进程传递。
我的做法是使用操作系统的跨进程共享内存来实现数据传递。
接下来,就是处理跨地图移动的问题了,我在这里费了点功夫。
因为跨地图移动,需要进行多进程同步。至少有A B两个地图服务器参与,还加上一个枢纽服务器,那么通信同步,数据库同步。就需要花点功夫来处理了。
首先必须对原服务器的逻辑流程有充分的了解,然后要做到出入地图的数据库操作原子化串行化。当然,要理清进出服务器的业务流程。
因为还要涉及多线程同步,所以这里确实会花一些精力。
最后,由于跨地图移动,对于客户端来说,现在是一个镜像的消失紧接着一个玩家的创建的过程,由于客户端的位移与服务端一般会有一个插值同步问题,所以会出现一个瞬移现象。那么需要给一些信息给客户端,把这个瞬移处理掉。
搞了半年,其中还做了2d A*寻路到recast&detour 3d寻路的迁移,还有飞行功能,家族功能,技能系统等内容,目前无缝地图只是是理论完成+初步测试。
mmorpg无缝地图相关推荐
- Unity无缝地图研究
http://blog.csdn.net/libeifs/article/details/6775818 开发环境 Window7 Unity3D3.4 MB525defy Android 2.2 ...
- UE4高级功能--初探超大无缝地图的实现LevelStream
转:原地址:http://blog.csdn.net/pizi0475/article/details/49004383 UE4高级功能--初探超大无缝地图的实现LevelStream 前言 好吧,这 ...
- ue4 无限地图_UE4大地图(流关卡、无缝地图)
对于UE4来说我只是个菜鸟,研究一下网上的教程稍微尝试的做一下demo,所以可能下面会有描述不准确或者说没解释清的地方请多谅解哈.也非常欢迎指出我说的不对的地方一起学习. 接下来开始教程. UE4的原 ...
- MMORPG 地图实现
网上看一篇关于目前几个流行flash mmorpg地图实现的分析,这里也想说说自己的一些看法. 常见的三种方式: 1.整图 2.Tile元素拼装 3.栅格化切片 整图 整图加载很好理解直接加载一张 ...
- 分析flash mmorpg地图的实现
网上看一篇关于目前几个流行flash mmorpg地图实现的分析,这里也想说说自己的一些看法. 常见的三种方式: 1.整图 2.Tile元素拼装 3.栅格化切片 整图 整图加载很好理解直接加载一张背景 ...
- 也谈Flash mmorpg地图问题【转】
网上看一篇关于目前几个流行flash mmorpg地图实现的分析,这里也想说说自己的一些看法. 常见的三种方式: 1.整图 2.Tile元素拼装 3.栅格化切片 整图 整图加载很好理解直接加载一张背景 ...
- 【转】Flash mmorpg地图问题
网上看一篇关于目前几个流行flash mmorpg地图实现的分析,这里也想说说自己的一些看法. 常见的三种方式: 1.整图 2.Tile元素拼装 3.栅格化切片 整图 整图加载很好理解直接加载一张背景 ...
- 【转载】也谈Flash mmorpg地图问题
作者:闪刀浪子 www.iflashigame.com 网上看一篇关于目前几个流行flash mmorpg地图实现的分析,这里也想说说自己的一些看法. 常见的三种方式: 1.整图 2.Tile元素拼装 ...
- 也谈Flash mmorpg地图问题
常见的三种方式: 1.整图 2.Tile元素拼装 3.栅格化切片 整图 整图加载很好理解直接加载一张背景图.这种方式比较适合小场景(面积不要超过两屏),例如可以用来做悦来客栈.家里的菜园子或者王员外的 ...
- 论MMORPG游戏服务器架构
就我见到过的MMO服务器架构做一个总结吧. 第一种,靠一个matchmaking服务器来做负荷均衡,这种架构比较适合大厅游戏或者副本游戏.方法是用一个服务器作为登陆服务器,所有玩家请求连接的要求都被该 ...
最新文章
- keras构建前馈神经网络(feedforward neural network)进行多分类模型训练学习
- 腾讯99公益日︱深圳市慈善会:那些无力的故事,都拥有了力量
- ubuntu c++检测usb口事件变化_拆解报告:美式双USBA口充电插座
- 一位合格的博士生需要有哪些条件和素质?
- win8能开发android的sdk么,Win8下Android SDK安装与环境变量配置教程
- pitr 原理_PostgreSQL基于时间点恢复(PITR)
- 【好文链接】从原理上搞懂PID
- 【ACL2020】用于改进文本分类的特征投影
- 音视频的采集、编码、封包成 mp4 输出
- mybatis将字段改为null_【MyBatis入门到入土精讲】MyBatis介绍
- “醒着拼”的东鹏饮料发中报,“饮料界茅台”名副其实吗?
- 微信小游戏上线字节平台超全攻略
- Windows Server 2008之旅??Windows Server Backup功能_闲云野鹤?精神家园_百度空间
- Manjaro安装教程及安装后操作
- windows大小写,切换键修改lock or shift
- 知识图谱可视化vue.js + d3.js
- 【ICML2022】可达性约束强化学习
- 使用360优化修复系统后无法上网的解决方法
- 想成为“牛人”的你,知道这些“壁垒”吗?——论技术壁垒、时间壁垒和成果壁垒
- IBM公司沃森系统测评
热门文章
- c++国际象棋上的麦粒
- 很全的电脑专业术语中英文对照
- mysql命令创库创表_MySQL基础创库创表知识
- 【P2P网络】磁力链接转换为种子文件 magnet to torrent .
- 【网络基础】DDNS - 动态DNS
- antony.net
- python描述对象静态特性的数据为_对于需要几个单位共同负担的一张原始凭证上的支出,应根据其他单位负担部分为其提高( )。...
- Python 【人工智能】【大数据】【全栈】【自动化】技能-张子夜-专题视频课程...
- 如何在网页中播放音乐和视频
- 算法思考题-三只老鼠找8瓶毒药思路(个人思考+收集)