1

私は iPhone ゲームに取り組んでいます。地面は、画面の下部から約 30 ピクセル上に伸びる長く繰り返される長方形のスプライト オブジェクトです。プレイヤーのスプライトがジャンプから地面に着地すると、地面の画像の上に着地するように、地面のエッジ形状を 30 ピクセルに揃えようとしています。次のコードを追加しようとしたところ、機能しませんでした。

b2BodyDef groundBodyDef;
groundBodyDef.position.Set(0, 30/PTM_RATIO);

b2Body *groundBody=world->CreateBody(&groundBodyDef);

b2EdgeShape groundLine;
groundLine.Set(b2Vec2(0, 30/PTM_RATIO), b2Vec2(screenSize.width/PTM_RATIO, 30/PTM_RATIO));
groundBody->CreateFixture(&groundLine, 0);

おそらく地面に長方形の形状を使用できることはわかっていますが、プレーヤーのスプライトは画像の上部にしか衝突しないため、エッジの形状を回避したいと思います。

4

1 に答える 1

4

シェイプの位置を設定する場合(例ではgroundLine.Set())、アタッチされるボディの位置を基準にして位置を設定します。したがって、あなたの体はすでにy = 30にあり、あなたの形はそれよりさらに30上になります。

グラウンドボディの場合は、ボディの位置を0,0のままにしてから、必要な位置にフィクスチャを追加することをお勧めします。通常、グラウンドボディは1つだけです。

また、デフォルトのデバッグ描画を使用することをお勧めします。これにより、実際に何が起こっているかを確認でき、問題がすぐにわかります。

于 2011-06-17T04:21:04.493 に答える