Box2D 是完全确定性的吗?

Axi*_*xus 5 android deterministic multiplayer box2d

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

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

如果不是,那么这意味着每次模拟结束时,作为主机的一个客户端将不得不告诉另一个丢弃其最终模拟的结果并使用它来代替。

Cir*_*四事件 5

官方常见问题报价

官方常见问题有一个引用,证实了你的推论http://web.archive.org/web/20160131050402/https://github.com/erincatto/Box2D/wiki/FAQ#is-box2d-deterministic

Box2D 是确定性的吗?

对于相同的输入和相同的二进制,Box2D 将重现任何模拟。Box2D 不使用任何随机数,也不基于随机事件(例如计时器等)进行任何计算。

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

或者换句话说:固定大小的浮点类型

为什么维基被删除,我不知道。人类。我很高兴他把项目名称小写了。


小智 3

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