【发布时间】:2016-08-25 19:07:26
【问题描述】:
我正在将 Box2D 用于与服务器通信的游戏,我需要完全确定性。我只是想使用整数数学/定点数学来实现这一点,我想知道是否有办法在 Box2D 中启用它。
【问题讨论】:
标签: c++ server box2d game-physics deterministic
我正在将 Box2D 用于与服务器通信的游戏,我需要完全确定性。我只是想使用整数数学/定点数学来实现这一点,我想知道是否有办法在 Box2D 中启用它。
【问题讨论】:
标签: c++ server box2d game-physics deterministic
是的。尽管使用了定点实现并修改了 Box2D 库代码。
Box2D 2.3.2 的 C++ 库代码使用 float32 类型来实现类似实数的值。由于 float32 在 b2Settings.h 中通过 typedef 定义(到 C++ float 类型),因此可以在一行中更改它以使用不同的类似实数值的底层实现。
不幸的是,如果float32 未定义为float,则某些代码(如b2Max)的使用或编写方式会中断。因此,必须追查这些错误并重写错误代码,以便可以使用新类型。
我自己完成了这类工作,包括编写自己的定点实现。缺点是我建议使用 64 位实现,其中值的小数部分在 14 到 24 位之间(至少要使其通过大多数 Testbed 测试而不会出现无法使用的下溢/溢出问题)。您可以查看 my fork 以了解我是如何做到这一点的,但目前还没有准备好发布的代码(截至 2017 年 2 月 11 日)。
【讨论】:
在物理引擎中实现确定性的唯一方法是在物理引擎上使用固定时间步长更新。您可以在此链接中阅读更多信息。 http://saltares.com/blog/games/fixing-your-timestep-in-libgdx-and-box2d/
【讨论】: