2011-01-18 45 views
5

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

我目前的设置是这样的。

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

目前为止还不错,但我没有任何资料可以平滑数据包之间的移动在客户端,我必须说,我无法得到它的工作。我一直在阅读预测,插值和死锁,但对我来说这一切都很糟糕。

所以现在我只是做一些像“位置= Packet.Position”,这会导致一个非常口吃的运动。

所以,我想要的帮助是,我如何得到更流畅的运动?一直在看XNA预测样本,但我无法做到。

谢谢// F

+0

你是否只需要让玩家的动作更流畅呢?客户是否知道玩家的当前速度? – ssmir 2011-01-18 22:42:37

+0

那么,目前我只有球员,这是我最关心的问题。客户端知道速度,它包含在服务器的状态包中。其实我在IRC上得到了一个很好的答案,明天会试试,如果成功,我会分享。 – 2011-01-18 22:51:54

回答

3

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

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

相同的算法在网上Ultima使用(至少,当我10年前打吧)

+0

它很有趣,你提到Ultima Online,它是我最喜欢的游戏之一。 :)如果我发现我当前的实现问题,我会尝试这个。但是,这个结果是否会导致玩家A和玩家B所看到的差异很大? – 2011-01-20 21:34:16

0

我运行鬼实体一起与我的主要的一个解决它。
重影每帧都会得到更新,但每当有数据包进入时,其值都会被设置为数据包的值。

然后我逐渐调整真正的实体到鬼的地方。