简短问题:
当客户端向服务器发送数据包时,延迟是否会突然大幅变化?
长问题(我的问题):
我正在使用 WebSockets 制作一个 HTML 游戏,并且目前正在处理客户端输入预测。我使用相同的代码用于客户端和服务器端来检查碰撞、计算新的玩家位置,每秒30次更新玩家移动。以下是我如何在服务器端和客户端更新玩家移动的方法:
if(controls.pressingRight === true)
{
if(controls.dx < settings.MAX_X_SPEED)
{
controls.dx += settings.DELTA_X_SPEED;
}
else
{
controls.dx = settings.MAX_X_SPEED;
}
}
if(*noCollisions*)
{
game.me.x += controls.dx;
}
这样一来,玩家的移动就比较流畅了。当用户按住“D”键时,控制.pressingRight值会被改为true,直到玩家松开“D”键。我编写代码的原因是不确定问题是否出在我的代码上或者是否与延迟变化有关。例如,我点击“D”键并快速释放它,在客户端画布上我的玩家移动了约7个像素,但在服务器端,玩家向侧面移动了20个像素或更多(尽管有时客户端和服务器端都移动相同数量的像素)。我猜测问题可能是因为当我按下按钮移动玩家时,延迟可能很低,比如说20,但当我释放时,ping可能达到200,这意味着数据包被传递的时间比应该早,因此服务器仍将我的“pressingRight”值保持为true。我有遗漏吗?