如何“漂亮”地解决dota类游戏网络延迟同步

发表于2016-01-18
评论5 9.4k浏览

主流的同步方案有两种:帧同步和CS同步。

正好这两天在整理这块的东西,就一并分享一下!也希望能够得到一些讨论的机会。

看到评论,补充一个观点:CS和帧同步其实各有有优缺点,并不是某一项方案一定能够取代另一项方案,当游戏类型对实时性要求很高时(比如,实时格斗、体育竞技类游戏(NBA2K)),帧同步可能就是唯一的方案了。

以下是正式答案

概念定义:


1 ArenaServer

  • 战斗核心逻辑及数据所在

  • 不关心表现

  • 由客户端的输入驱动运行

  • CS同步架构里,这个部分是在服务器的

  • 帧同步架构里,这个部分是在客户端的。



2 ArenaServer[预表现层]

  • 战斗的预表现层,一定在客户端

  • 对于一些需要本地预表现的逻辑,如行走。需要先在这里模拟实现。

  • ArenaServer的真实数据反馈到预表现层后,会修改本地数据。

  • ArenaClient只知道预表现层,并不知道真正的ArenaServer的存在。

  • 所以,当游戏要改变同步方案时,Client层并不需要修改。


3 ArenaClient:ArenaInput+ArenaRender

  • 负责客户端输入和渲染

  • 只与预表现层交互。


4 FrameServer

  • 以每秒30次(假设)的频率,收集各个客户端上报上来的ClientInput。

  • 组装为FrameInput,广播给各个客户端。

  • 即为帧同步的服务器所有逻辑



如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引

5个评论

  • 腹黒の邪皇殿 2016-01-18 1楼
    想知道LOL是如何反全图挂的
  • 泡沫 , 2016-01-19 2楼
    mark~感谢分享
  • 忆丶内伤 2016-01-19 3楼
    喜欢哈,收藏了呢哦,感谢分享
  • 晚安 2016-01-21 4楼
    dota2不是帧同步,这个玩过游戏的都知道,因为你在丢包的情况下,远程攻击的弹道都会显示不出来
  • 淡然。     2016-01-23 5楼
    已收藏。