Go游戏服务器开发的一些思考(三十八):MMO游戏移动同步
2018-03-13 12:20
1186 查看
MMO游戏移动同步
MMO游戏与IO游戏的不同:类型 | 视野内人数 | 交互性强弱 |
---|---|---|
MMO游戏 | 多,大到几百人 | 相对弱 |
IO游戏 | 少到一定范围,如最多10、20人等 | 强 |
类型 | 策略 |
---|---|
MMO游戏 | 需要控制流量,放缓同步间隔间隔 |
IO游戏 | 可以牺牲可接受的流量,适当频繁同步 |
本方案,综合参考了一些典型的 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包发送
同步信息,待考擦。
相关文章推荐
- Go游戏服务器开发的一些思考(十七):IO游戏同步(三)
- Go游戏服务器开发的一些思考(三十四):无缝世界场景构建与同步(一)
- Go游戏服务器开发的一些思考(三十五):无缝世界场景构建与同步(二)
- Go游戏服务器开发的一些思考(三十七):无缝世界场景构建与同步(四)
- Go游戏服务器开发的一些思考(三十六):无缝世界场景构建与同步(三)
- Go游戏服务器开发的一些思考(十一):IO游戏同步
- Go游戏服务器开发的一些思考(十四):IO游戏同步(二)
- Go游戏服务器开发的一些思考(十六):IO游戏服务器架构
- Go游戏服务器开发的一些思考(三十二):关于无缝世界的一些思考
- Go游戏服务器开发的一些思考(二十一):Go语言的两处脑残设定
- Go游戏服务器开发的一些思考(一):语言层面
- Go游戏服务器开发的一些思考(三):综合考察(中)
- Go游戏服务器开发的一些思考(五):goroutine看似美好的陷阱
- Go游戏服务器开发的一些思考(二):综合考察(上)
- Go游戏服务器开发的一些思考(七):Redis
- Go游戏服务器开发的一些思考(二十八):登录流程(一)
- Go游戏服务器开发的一些思考(三十):排行榜服务器设计思路
- Go游戏服务器开发的一些思考(三十一):排行榜服务器设计思路(二)
- Go游戏服务器开发的一些思考(二十六):Go Redis ORM库
- Go游戏服务器开发的一些思考(三十九):go reflect的正确使用方法