Go游戏服务器开发的一些思考(三十六):无缝世界场景构建与同步(三)

本文内容思想来源于2位同事的研究。

主要关于实体的创建、主从的确定、主从切换。

实体第一个实例创建

这本身没有多少可讲的

需要知道的是,这个实体是Master(废话)

实体主从切换原则

  • 如果实体Master实例,完全在Cell管辖区域(绿色部分区域),是不需要做主从切换的。
  • 如果实体Master实例,在Cell边界与主从切换线内移动,是不需要做主从切换的。
  • 如果实体Master实例,越过主从切换线,则做主从切换。

详细,下面接着分析。

实体主从切换

Go游戏服务器开发的一些思考(三十六):无缝世界场景构建与同步(三)_第1张图片

上图为A实体从 Cell1 到 Cell0,并完成主从切换的过程。(注意,这里有一条主从切换线。)

正常的思路是,A1 -> A2, 在2个Cell的分界线上,就可以完成主从切换。

但是这样有个问题,A1->A2后,又A2->A1,如果有实体在2个Cell的分界线上来回跑。

则,会持续发生主从切换,造成系统错误。

因此,把主从切换线,从Cell边界线上往后移动。

如图中的主从切换线的位置。

主从切换线 后移后,那么 A2->A3,在越过 主从切换线时 做了主从切换。Cell3上的A实体实例变成Master。

A3->A2移动时,A实体Master实例完全在Cell3上。因此不会在发生主从切换。

以上

消息同步

所有实体消息处理,都必须有Master实体实例处理,再同步给Slave实体实例。

因此A B C 在Cell1 Cell2 Cell3 上,如果能战斗,那么它们的计算过程,最多是在3个Cell进程内处理的。

都以Master实体实例计算为主。

你可能感兴趣的:(Go游戏服务器开发的一些思考,无缝世界,系统设计,游戏设计)