您的位置:首页 > 编程语言 > Go语言

Go游戏服务器开发的一些思考(三十八):MMO游戏移动同步

2018-03-13 12:20 1186 查看

MMO游戏移动同步

MMO游戏与IO游戏的不同:

类型视野内人数交互性强弱
MMO游戏多,大到几百人相对弱
IO游戏少到一定范围,如最多10、20人等
因此,会采取不同的策略,来做移动同步。

类型策略
MMO游戏需要控制流量,放缓同步间隔间隔
IO游戏可以牺牲可接受的流量,适当频繁同步
本文下面,针对MMO游戏,提供一种移动同步方案。

本方案,综合参考了一些典型的 IO游戏移动同步、MOBA游戏移动同步。

同步的信息

服务器会向客户端发送
同步信息


位置XYZ

状态

朝向XYZ (与锁定目标互斥。)

锁定目标(与朝向互斥。值为游戏对象ID)

客户端移动机制

客户端只有在下列情况向服务器发送移动事件

玩家开始移动

玩家停止移动

玩家改变方向

玩家改变速度

客户端收到服务器的
同步信息
,才会移动

客户端朝最新的
同步信息
,做平滑追赶

服务器移动机制

服务器每帧更新移动状态

服务器收到客户端移动事件,都会向客户端(s)发送
同步信息


服务器逻辑触发端移动事件,都会向客户端(s)发送
同步信息


除特殊情况下,服务器每
1
秒向客户端(s)发送
同步信息
(针对移动中的客户端)

客户端处于静止状态,服务器不会定时向客户端(s)发送
同步信息


如果是玩家改变方向、改变速度,则服务器持续
3
次每
100ms
向客户端(s)发送
同步信息


服务器端3D建模的场景移动算法

前提条件:

已3D建模

能射线检查

有高度图

服务器每帧更新移动状态,假设某帧,从(x0, y0)点移到(x1, y1)点

可以按以下步骤完成目的点是否可行走:

通过高度图,可以得到完整坐标从(x0, y0, z0)点移到(x1, y1, z1)点

射线检查(x0, y0, z0+H) - (x1, y1, z1+H)间有无障碍物。

H值可以硬编码,射线检测要高点,不然沿着地面在做射线检测

检查 (x0, y0, z0) 、(x1, y1, z1)2点的z值高度差

只有无障碍物、z值高度差在一定范围: [-a, b]内,则可行走

以上

使用UDP包发送
同步信息

由于MMO游戏的场景服务器,通常在网关服务器后面。

是否可以使用UDP包发送
同步信息
,待考擦。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐