平滑的MultiPlayer运动

时间:2011-01-18 22:14:17

标签: networking multiplayer smoothing

我正在开发一款多人角色扮演游戏,(不,它不是mmorpg。;)

我目前的设置是这样的。

客户端告诉服务器“我想继续前进”/“我想向后移动”,然后服务器更新您的实体,并通知该区域内的所有客户端有关更改。服务器还每20ms更新一个实体,每隔100ms向客户端发送更新,这些更新包含位置,速度,旋转等。

到目前为止一切都那么好,但是我没有任何东西用于平滑客户端数据包之间的移动,我必须说,我无法让它工作。我一直在阅读有关预测,插值,死劫的内容,但这对我来说太过分了。

所以现在我正在做一些像“Position = Packet.Position”这样的事情,这会导致一个非常卡顿的运动。

所以,我想要帮助的是,我如何获得更平稳的动作?一直在看XNA预测样本,但我无法做到正确。

谢谢// F

3 个答案:

答案 0 :(得分:12)

阅读Valve's description of their multiplayer protocol。它应该是有益的,并给出一个非常明确的例子,说明如何进行预测/插值。

答案 1 :(得分:3)

我从another question建议这个想法(见接受的答案)

这里客户端计算其位置本身就好像它不是网络游戏。客户定期将其当前位置发送到服务器。如果客户作弊或无法继续沿所选方向移动,服务器只会向客户端发送正确的位置。

在Ultima Online中使用了相同的算法(至少在我10年前玩的时候)

答案 2 :(得分:0)

我通过在我的主要实体旁边运行一个幽灵实体来解决它 幽灵也会在每一帧都得到更新,但每当数据包进入时,他的值都会被设置为数据包的值。

然后我逐渐将真实实体调整到幽灵所在的位置。