我目前有一个 iOS 格斗游戏,我正在做一些联网以允许多人游戏。我正在使用 GameCenter 在两个设备之间传输数据,稍后将扩展为同时处理 4 个设备。
我的网络架构如下:
-两个客户端通过GKMatch找到对方,一个“Server”由随机数生成确定,另一个设备为“Client”。服务器对所有逻辑拥有最终决定权。
- 对于客户端,我正在检测按键,并将这些输入发送到服务器。同时,我也在客户端处理这些输入,并预测(和显示)客户端看到的世界。这使得输入感觉很快,就像一个没有延迟的单人游戏。客户端有一个调度器,它设置为每秒发生 10 次,它存储当前游戏对象状态(所有角色/射弹的位置),并将其存储在一个序列号递增的数组中。
- 服务器有一个调度程序,它每秒发送 10 次“游戏对象”数据包。这个游戏对象也有一个序列号,它随着它发送的每个数据包而递增。
- 客户端从服务器接收这些游戏对象数据包,并将游戏对象数据包与其序列号相同的数组中的游戏对象进行比较。本质上是将时间 t 的服务器世界与时间 t 的客户端世界进行比较。如果有任何差异,客户端将其世界回滚到由序列号指示的时间,调整对象在世界中的位置,然后重新输入所有客户端按键/输入以到达当前时间。
我的问题是,我服务器上的 1.0/10.0 调度程序比客户端上的 1.0/10.0 调度程序慢。正在发送的数据包远远落后于客户端存储的数据包。随着时间的推移,时间越走越远。
反正有保证时间吗?>?