我正在使用Box2D进行与服务器通信的游戏,我需要完全确定性。我只想使用整数数学/定点数学来实现这一点,我想知道是否有办法在Box2D中启用它。谢谢!
答案 0 :(得分:1)
是。虽然有定点实现并且修改了Box2D库代码。
Box2D 2.3.2的C ++库代码使用float32
- 类型来实现类似实数的值。由于float32
通过b2Settings.h
(对于C ++ typedef
类型)定义float
,因此可以在一行中更改b2Max
以使用实际的不同底层实现类似数字的值。
不幸的是,如果float32
未被定义为float
,则会使用或写入某些代码(如public void build(){...}
)。因此,必须逐步删除这些错误并重写错误代码,以便可以使用新类型。
我自己完成了这项工作,包括编写自己的定点实现。除此之外,我建议使用64位实现,其中小数部分值为14到24位(至少要通过大多数Testbed测试,而没有不可用的下溢/溢出问题)。您可以查看my fork以查看我是如何完成此操作的,但目前还没有准备好发布的代码(不是2017年2月2日)。
答案 1 :(得分:0)
在物理引擎中实现确定性的唯一方法是在物理引擎上使用固定时间步骤更新。您可以在此链接中阅读更多信息。 https://tools.ietf.org/html/rfc3986