5

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

我目前的设置是这样的。

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

到目前为止一切顺利,但是我没有任何东西可以平滑客户端数据包之间的移动,我必须说,我无法让它工作。我一直在阅读有关预测、插值、deadreackoning 的内容,但这对我来说都是一团糟。

所以现在我只是在做类似“Position = Packet.Position”的事情,这会导致非常卡顿的动作。

所以,我需要帮助的是,我如何获得更流畅的运动?一直在查看 XNA 预测样本,但我无法正确理解。

谢谢 //F

4

3 回答 3

12

阅读Valve 对其多人游戏协议的描述。它应该是有启发性的,并给出了一个非常清楚的例子来说明你如何进行预测/插值。

于 2011-01-18T22:20:55.933 回答
3

我会从另一个问题中提出这个想法(请参阅接受的答案)

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

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

于 2011-01-18T23:06:58.283 回答
0

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

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

于 2011-01-19T13:56:45.757 回答