0

我有一个球,你用空气吹。如果球靠近鼓风机,我希望球被吹得更多,如果离鼓风机更远,我希望球被吹得更少。我正在使用 box2d 并且正在使用脉冲函数。“body->ApplyLinearImpulse(force, body->GetPosition())”。我似乎无法找到一个公式或方法来实现这一点。如果我想让球吹到 300 像素的总距离,我怎么能做到这一点?请帮忙。

4

3 回答 3

1

如果要在模拟之前计算距离,则必须查看 box2d 源。在模拟身体的速度时,会根据重力、额外施加的力、线性阻尼、角阻尼等进行修改。速度也依赖于速度迭代。

但我认为如果你想要一个非常平滑的动作(比如从打击中),你最好使用 applyForce 函数而不是脉冲。但请确保您在每个模拟步骤中都施加了力。

编辑:

您也可以将空气阻力模拟为:Fa = -k*V*V。我以这种方式模拟了管道中的运动。工作得很好。

所以每一步你都可以做这样的事情:

BlowForce = k1 / distance; // k1 - coefficient
Resistance = -k2 * V * V; //k2 - another coefficient
TotalForce = BlowForce + Resistance;
body->ApplyForce(TotalForce);
于 2011-09-21T18:41:49.510 回答
0

我不是 2d 盒子专家,但我要做的是创建一个实际上不可见的小盒子,然后让球击中盒子……如果鼓风机吹得更多,我会在相反的方向给盒子更多的速度。就 300 像素长度而言,您必须调整力和速度,以使球移动

300/<your_rendering_window_to_physics_world_ratio>

在物理世界中。

于 2011-09-21T03:16:08.350 回答
-1

力 = 质量 * 加速度,所以取你设置身体的质量,计算你想要的加速度(记得用 300px 除以 PTM_RATIO),然后将两者相乘。

于 2011-09-21T21:39:21.540 回答