我正在开发一款多人角色扮演游戏,(不,它不是mmorpg。;)
我目前的设置是这样的。
客户端告诉服务器“我想继续前进”/“我想向后移动”,然后服务器更新您的实体,并通知该区域内的所有客户端有关更改。服务器还每20ms更新一个实体,每隔100ms向客户端发送更新,这些更新包含位置,速度,旋转等。
到目前为止一切都那么好,但是我没有任何东西用于平滑客户端数据包之间的移动,我必须说,我无法让它工作。我一直在阅读有关预测,插值,死劫的内容,但这对我来说太过分了。
所以现在我正在做一些像“Position = Packet.Position”这样的事情,这会导致一个非常卡顿的运动。
所以,我想要帮助的是,我如何获得更平稳的动作?一直在看XNA预测样本,但我无法做到正确。
谢谢// F
答案 0 :(得分:12)
阅读Valve's description of their multiplayer protocol。它应该是有益的,并给出一个非常明确的例子,说明如何进行预测/插值。
答案 1 :(得分:3)
我从another question建议这个想法(见接受的答案)
这里客户端计算其位置本身就好像它不是网络游戏。客户定期将其当前位置发送到服务器。如果客户作弊或无法继续沿所选方向移动,服务器只会向客户端发送正确的位置。
在Ultima Online中使用了相同的算法(至少在我10年前玩的时候)
答案 2 :(得分:0)
我通过在我的主要实体旁边运行一个幽灵实体来解决它 幽灵也会在每一帧都得到更新,但每当数据包进入时,他的值都会被设置为数据包的值。
然后我逐渐将真实实体调整到幽灵所在的位置。