帧同步与状态同步
ECS架构
ECS架构看起来就是这样子的。先有个World,它是系统(译注,这里的系统指的是ECS中的S,不是一般意义上的系统,为了方便阅读,下文统称System)和实体(Entity)的集合。而实体就是一个ID,这个ID对应了组件(Component)的集合。组件用来存储游戏状态并且没有任何的行为(Behavior)。System有行为但是没有状态。
数据和逻辑分离, Component中只有数据, System中只有逻辑, 首先有一个World, 管理着所有的Entity是Component的容器. 还有一个EntityAdmin来管理所有的Entity
游戏中不同的角色,看待同一个Entity下同一个Component时的视角是不一样的,角色希望这个Component能做什么,那么这个Component就真的可以做什么, Component自己能做什么不是它自己决定的, 而是由其观察者决定的. 但是这些观察者应当只是从Component中读状态, 而不会修改Component中的状态, Component中的状态需要有专门对应的System进行修改. 结果看来,根据主体视角区分所有Behavior,这样来描述一棵树的全部行为会更容易,这个道理同样也适用于游戏对象(game objects)。
同步相关
服务器上会构建一个纯数据向的World,所有Player的操作都会上报给服务器,不过由于客户端和服务器端的通信存在延迟,因此客户端会现在本地进行模拟,同时将操作上报给服务器并等待结果返回,如果服务器返回回来的数据和客户端模拟的结果是一致的,那么就可以继续下去,否则客户端就要会回退状态 然后客户端进行时间膨胀.
帧同步
客户端向服务端发出指令后需要等待一段时间才能收到服务器那边的答复, 在客户端等的这段时间里, 不能让玩家干等着啊,