我不知道box2D中是否有这样的参数,但当我复制场景中所有数字时,模拟会产生不同的结果。我只是模拟了一个摆(静态框连接到动态框,使用旋转关节),当我将场景中的所有值乘以32(与我的游戏具有相同的比例)时,它下落得比正常情况慢(我也增加了重力)。似乎当摆下落时,它达到了一定的最大速度,并且不会超过这个速度。所以当它回来时,它只能达到从哪里开始下落的一半高度。顺便说一句,我认为这不是由于摩擦力,因为我将所有阻尼和摩擦系数设置为零,而且在缩放场景之前没有出现这个问题。
在b2Settings.h中更改b2_maxTranslation的值。
Box2d使用迭代求解器进行模拟,不同大小的物体可能会产生不同的结果 - 这没关系。手册中写道,模拟动态对象的最佳大小为0.1-10,静态物体则为50以上。同时,增加所有尺寸并不能在现实世界中产生相同的运动效果。例如,想象一下一个半径为1米、从100米高度落下的球体。将其半径和高度乘以10,显然会得到不同的落地时间,因为它只取决于高度。
此外,我曾经尝试过nvidia physx。我只创建了一个非常简单的场景 - 一个立方体在平面上掉落并弹跳。这个立方体的边长为1米。首先,我以密度为10模拟,一切都很完美。然后,我决定模拟一个铁块,并将密度改为7200。正如你所理解的那样,由于恢复参数没有改变,弹跳应该完全相同。但是模拟效果真的很糟糕 - 立方体掉进平面并且弹跳很难看。因此,保持值在推荐范围内非常重要。