Corona SDK 位置预测。

我正在使用Corona SDK创建一个多人游戏。每个设备每秒发送15条消息,包含他们角色的位置。由于一些消息接收时间略有不同,而在30帧每秒的游戏中只发送15次,因此导致移动不流畅。如果下一帧没有接收到数据,我应该如何计算出从前一帧到当前帧的角色位置或旋转的差异,以预测其位置。我完全接受其他解决方案!谢谢!

原文链接 https://stackoverflow.com/questions/24440191

点赞
stackoverflow用户869951
stackoverflow用户869951

如果发送速率是固定且双方(发送方和接收方)都知道的话,接收者就可以假设它。在这种情况下,据死算法是一种已经得到充分验证且容易应用的技术。例如,如果发送者每隔 1/15 秒发送一次数据,那么接收者可以假设在接收到第一个数据包后,任何其他的数据包都是相隔 1/15 秒。如果在 1/15 秒内没有接收到任何东西,那么接收者会猜测如果它确实被接收到的话,数据包在 1/15 秒后的情况是什么。然后当数据包实际到来时,它会纠正猜测。

唯一需要保证的是数据包的顺序和交付。如果数据包从不丢失并且始终按顺序到达(即 TCP),那么它就很可靠。

如果可以保证顺序但有些数据包会丢失,则接收者需要知道何时发生了丢失。我认为可以通过为数据包计数器的方式去纠正。因此,如果接收者收到一个计数器为 X 的数据包,下一个数据包的计数器为 X+2,那么接收者就知道该数据包已经丢失了,因为顺序是保证的,所以两者之间的时间差为 2/15 秒。

如果不会丢失数据包,但无法保证顺序,则计数器也将有所帮助:接收者保证如果数据包 X 已经到达了,那么数据包 X+1 最终也会到达,所以即使它收到了 X+2,它也会将 X+2 保存,并等待 X+1 到达。

最后,如果既无法保证传递,也无法保证顺序(即在广域网上传输的 UDP 数据包),那么计数器仍然是充分的,但算法会有所改变:如果接收者收到一个计数器为 X 的数据包,然后收到了 X+2,这可能意味着 X+1 已经丢失了,或者会很快到达,但无法知道。因此,如果在短时间内(也许又 1/15 秒)没有收到 X+1,接收者将宣布数据包丢失(因此,如果最终到达,则将被忽略)。

以上都是在发送方频率几乎恒定的情况下进行的。

2014-06-28 03:51:38