私は、初期位置から上昇する移動プラットフォーム(キネマティックボディ)を持っています。
b2BodyDef platformDef;
platformDef.type = b2_kinematicBody;
platformDef.linearVelocity = b2Vec2(0.f, 0.5f);
これで、プレーヤーが制御するボール(ダイナミックボディ)ができました。前述のプラットフォームに乗って、その位置から上がることができます。ボールのデータは次のとおりです。
b2BodyDef ballDef;
ballDef.type = b2_dynamicBody;
ballDef.fixedRotation = true;
b2Body *ball = b2dWorld.CreateBody(&ballDef);
b2FixtureDef fixDef;
fixDef.shape = &shapeCircle; // a simple b2CircleShape with radius 0.6m
fixDef.density = 1.f;
fixDef.friction = 0.2f;
fixDef.restitution = 0.3f;
ball->CreateFixture(&fixDef);
これで、ボールは移動するプラットフォームの上を正しく移動しますが、移動中はボールのボディにわずかなジッターがあります。つまり、移動しているプラットフォームとボールが継続的に衝突します。ボールの反発力を0に設定してみましたが、役に立ちませんでした。
この詳細が必要な場合、システムのピクセルとメーターの比率は0.02です。