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