我最近一直在为实时、快节奏的游戏建立网络。看来,如果您正确插值,则命中计算是在从 player2(p2)s 点超过 (p1.interp+p2.interp+p1.ping/2+p2.ping/2) 之前发生的状态上完成的查看射手是 player1(p1) 时的情况。
数据包首先到达接受 p1.ping/2 的服务器,然后服务器根据 p1.interp + p1.ping/2 之前发生的游戏状态计算它。该计算的结果被发送到 player2,稍后只能看到它 p2.interp。由于所有三个方面都需要时间来处理事情,因此它会进一步增加。
player1 server player2
| | |
.------|_1.............actual.....|.....game state......|
| | | ^ |
|intrp |_2 | | |
| | | | |
`----->|_3----ping/2 | | |
`------|_4----ping/2 |
`------5_|-------.
| |
6_| intrp|
| |
7_|<------‘
请原谅我糟糕的 ASCII 艺术技能,但我无法抗拒。
(我回到家,我安装了 Windows,我看到这里看起来很糟糕,但希望你们能明白)
假设 50 毫秒 ping,100 毫秒插值它给了我们超过 250 毫秒的总和。这意味着 player2 在过去大约 250 毫秒被 player1 看到,但假设客户端预测,他实时看到自己。我的逻辑有缺陷还是这没什么大不了的?