我有一个球,你用空气吹。如果球靠近鼓风机,我想让球吹得更多,如果距离鼓风机更远,则吹得更少。我正在使用box2d而我正在使用脉冲函数。“body-> ApplyLinearImpulse(force,body-> GetPosition())”。我似乎无法找到一个公式或方法来实现这一目标。如果我想要将球吹向300像素的总距离,我怎么能做到这一点?请帮忙。
答案 0 :(得分:1)
如果你想在模拟前计算距离,你必须看看box2d来源。当模拟身体的速度根据重力,额外施加的力,线性阻尼,角阻尼和可能更多的东西进行修改。速度也依赖于速度迭代。
但我想如果你想要一个非常平滑的动作(比如一击),你最好使用applyForce函数而不是impulse。但是请确保你在每个模拟步骤中施加力。
修改强>
您还可以模拟空气阻力: Fa = -k * V * V.我用这种方式模拟了管道中的运动。工作得很好。
所以每一步你都可以做这样的事情:
BlowForce = k1 / distance; // k1 - coefficient
Resistance = -k2 * V * V; //k2 - another coefficient
TotalForce = BlowForce + Resistance;
body->ApplyForce(TotalForce);
答案 1 :(得分:0)
我不是一个盒子专家,但我要做的是创造一个实际上看不见的小盒子让球击中盒子......如果鼓风机吹得更多,我会给对面的盒子提供更多的速度方向。就300像素长度而言,你必须调整力和速度,以使球变为
300/<your_rendering_window_to_physics_world_ratio>
在物质世界中。
答案 2 :(得分:-1)
力=质量*加速度,所以取你设定身体的质量,计算你想要的加速度(记得用PTM_RATIO划分300px),然后将两者相乘。