2)我是否应该使客户端状态进展得足够远,以至于可以计入整个往返行程,或者仅仅是从服务器获取数据到客户端所花费的时间?
假设服务器在时间T0发送状态,客户端在时间T1看到状态,玩家在时间T2做出反应,服务器在时间T3获得他们的答案,并立即对其进行处理。在此,往返延迟为T1-T0
+ T3-T2。在理想世界中,T0 = T1和T2 =
T3,观察时间与玩家行为处理之间的唯一延迟是玩家的反应时间,即T2-T1。在现实世界中,它是T3-T0。因此,为了模拟理想世界,您需要减去整个往返延迟:
T2-T1 = T3-T0 + (T1-T0 + T3-T2)
这意味着速度较慢的网络上的播放器会比速度较快的网络上的播放器看到更高级的状态。但是,这对他们没有好处,因为要花更长的时间才能处理完他们的反应。当然,如果两个玩家紧挨着并使用不同的速度网络,这可能会很有趣。但这是不可能的情况,不是吗?
整个过程存在一个问题:您在将来进行推断,这可能会导致荒谬的情况。其中有些功能,例如跳入墙壁很容易避免,但取决于玩家互动的功能则无法避免。1个
也许您可以颠倒您的想法:而不是进行预测,而是在T3-(T1-T0 +
T3-T2)时评估玩家的动作。如果您确定将以这种方式命中角色,请相应地降低其命中点。这可能比原始想法更容易,更现实,或者可能更糟,或者根本不适用。只是一个想法。
1想象两个玩家互相对抗。根据推断,它们在右侧彼此通过。实际上,其中一个改变了方向,最后它们在左侧彼此通过。



