5

2 つのダイナミック ボディが回転ジョイントで一緒に接続されています。両方のボディは、反対側の静的ボディにも接続されています。一定量以上の力が加えられたとき、つまりジョイントが抵抗できる以上の質量があるときに、2 つのダイナミック ボディ間のジョイントを壊す必要があります。これは Box2d でどのように行われますか? これは Box2d によって自動的に処理されないと思います。これが私が達成したいことのグラフィカルな概要です。

ここに画像の説明を入力

4

1 に答える 1

5

b2Joint::GetReactionForce を使用します。

各タイム ステップ チェックで、ジョイントの反力が臨界値未満であるかどうかを確認します。力が大きくなったら関節を破壊する。

void update(float timeStep)
{
    b2Vec2 reactionForce = joint->GetReactionForce(1/timeStep);
    float forceModuleSq = reactionForce.LengthSquared();
    if(forceModuleSq > maxForceSq)
    {
        world->DestroyJoint(joint);
    }
}

world - b2World へのポインター、joint - b2RevoluteJoint へのポインター、maxForceSq - 最大力の 2 乗。

ほら、LengthSquared を計算し、maxForce の 2 乗と比較します。平方根を計算する必要がないため、これによりパフォーマンスが向上します。

最大力は重力として計算できます: maxMass*9.8。

于 2013-02-25T14:55:14.227 に答える