繁体   English   中英

Corona SDK位置预测

[英]Corona SDK position prediction

我正在使用Corona SDK创建多人游戏。 每个设备每秒发送15条消息,其中包含其字符的位置。 由于某些消息的接收时间略有不同,并且在30 fps的游戏中每秒仅发送15条消息,因此导致波动较大。 如果下一帧中未接收到任何数据,我该如何利用字符从上一帧到当前帧的位置或旋转差异来预测位置。 我也完全接受其他解决方案! 谢谢!

如果发送速率是固定的,并且双方(发送者和接收者)都知道,则接收者可以假定它。 在这种情况下,航位推算是一种易于应用的成熟技术。 例如,如果发送方每1/15秒发送一次数据,则接收方可以假定在接收到第一个数据包之后,其他所有数据包的间隔都为1/15秒。 如果在1/15秒后未收到任何内容,则接收方将猜测如果已接收到数据,则在1/15秒处会是什么。 然后,当数据包实际到达时,它会纠正猜测。

唯一要保证的是数据包的顺序和传递。 如果数据包永不丢失,并且始终按顺序到达那里(即TCP),那您就在笑。

如果订单得到保证,但有些订单被丢弃,那么接收方需要知道何时发生丢弃。 我认为可以通过作为数据包一部分的计数器进行更正。 因此,如果接收方收到一个计数器= X的数据包,而下一个数据包的数据包= X + 2,则接收方会知道该数据包已被丢弃,因为顺序得到保证,因此两者之间的时间增量为2/15秒。

如果没有落单但不能保证订单,计数器也会为您提供帮助:可以保证您的接收器确保如果X已经到达,则X + 1最终会到达,因此即使接收到X + 2,也应保存X + 2并等待X + 1到达。

最终,如果既不能保证传递也不能保证顺序(对于WAN上的UDP数据包),那么再增加一次计数器就足够了,但是算法会改变:如果它获得了counter = X的数据包,并且得到了X + 2,则可以表示X + 1已被删除,或将很快到达,但是没有办法知道。 因此,如果X + 1到那时还没有到达,接收方可以等待一小段时间(可能是另一个1/15秒),将其声明为已丢弃(因此,如果最终到达,它将被忽略)。

在上面,发送器的近恒定频率至关重要。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM