SetLinearVelocityを使用して現在の速度をオーバーライドできます。
b2Vec2 vel = body->GetLinearVelocity();
float speed = vel.Normalize();//normalizes vector and returns length
if ( speed > maxSpeed )
body->SetLinearVelocity( maxSpeed * vel );
===============
編集:
単純な空気抵抗は、移動の速度に合わせてスケーリングされた、移動の反対方向に小さな抗力を適用することによってモデル化できます。
b2Vec2 vel = body->GetLinearVelocity();
body->ApplyForce( 0.05 * -vel, body->GetWorldCenter() );
抗力のスケール値(この例では0.05)は、抗力がロケットモーターによって加えられる力と等しくなり、2つの力が互いに打ち消し合って、最高速度になる速度を決定します。
maxSpeed = thrustForce.Length() / 0.05;
純粋主義者は、抗力は実際には速度の2乗に相対的であると指摘するので、より正確に行うには次のことができます。
b2Vec2 vel = body->GetLinearVelocity();
float speed = vel.Normalize(); //normalizes vector and returns length
body->ApplyForce( 0.05 * speed * speed * -vel, body->GetWorldCenter() );
...私はあなたに最高速度を与えると思います
maxSpeed = sqrtf( thrustForce.Length() / 0.05 );