Box2D是完全确定的吗?

问题描述 投票:4回答:2

我正在使用LibGDX和Box2D编写Android游戏。我打算为它添加一个回合制多人游戏功能。

现在,如果在两个客户端上,我以相同的速率以相同的时间步进Box2D世界,我在具有完全相同的初始参数的两个客户端上开始模拟,当模拟结束时,两个模拟的最终状态将是相同?换句话说,Box2D模拟是完全确定的吗?

如果不是,则表示每次模拟结束时,作为主机的一个客户端必须告诉对方丢弃其最终模拟的结果并使用它。

android box2d multiplayer deterministic
2个回答
3
投票

环顾四周后,答案是“否”,即使使用相同的时间步骤!这个答案的原因与许多编译器和处理器中如何实现浮点数学有关。每个周期的小差异加起来导致显着不同的模拟。


1
投票

官方FAQ报价

官方常见问题解答现在有一个引用,证实你推断的https://github.com/erincatto/Box2D/wiki/FAQ/933830ba42bce329a6697212050da00c383f1e79

#Determinism ## Box2D是否具有确定性?对于相同的输入和相同的二进制,Box2D将重现任何模拟。 Box2D不使用任何随机数,也不对随机事件(如计时器等)进行任何计算。

然而,人们通常需要更严格的决定论。人们经常想知道Box2D是否可以在不同的二进制文件和不同的平台上产生相同的结果。答案是不。这个答案的原因与许多编译器和处理器中如何实现浮点数学有关。如果你很好奇,我建议你阅读这篇文章:http://www.yosefk.com/blog/consistency-how-to-defeat-the-purpose-of-ieee-floating-point.html

© www.soinside.com 2019 - 2024. All rights reserved.