我正在开发一个多人角色扮演游戏,(不,它不是mmorpg。;)
我现在的设置是这样的。
客户端告诉服务器“我想向前移动”/“我想向后移动”,然后服务器更新您的实体,并将更改通知给该区域中的所有客户端。服务器每20ms更新一次每个实体,每100ms向客户端发送一次更新,这些更新包括位置、速度、旋转等。
到目前为止一切顺利,但是我还没有准备好在客户端平滑数据包之间的移动,我必须说,我不能让它工作。我一直在学习预测,插值,死锁,但这对我来说都是一团乱麻。
所以现在我只是做一些类似于"Position = Packet.Position“的事情,这会导致一个非常卡顿的运动。
所以,我需要帮助的是,我如何才能获得更流畅的运动?我一直在看XNA预测示例,但我不能正确地理解它。
谢谢//F
发布于 2011-01-19 07:06:58
我推荐来自another question的想法(参见公认的答案)
在这里,客户端自己计算自己的位置,就好像它不是网络游戏一样。客户端定期将其当前位置发送到服务器。如果客户端作弊或不能继续沿着选定的方向移动,服务器就会将其正确位置发送给客户端。
Ultima Online也使用了同样的算法(至少在我10年前玩它的时候是这样)
发布于 2011-01-19 06:20:56
阅读Valve's description of their multiplayer protocol。它应该是有指导意义的,并给出了一个关于如何进行预测/插值的非常清晰的示例。
发布于 2011-01-19 21:56:46
我通过在我的主实体旁边运行一个幽灵实体来解决它。
重影也将在每一帧中更新,但只要有数据包进入,它的值就会被设置为数据包的值。
然后,我逐渐将真实实体调整到幽灵所在的位置。
https://stackoverflow.com/questions/4729660
复制相似问题