基本的に、本物のPongの感触を得るには、独自の物理演算を実装する必要があります。
古典的なゲームは通常、物理学を単純な2Dの速度と位置(そしておそらく加速度)として実装し、それ以外はすべて偽造します。
(現代のゲームでさえ、できる限り偽物であることに注意する価値があります。簡単な方法で同じゲームプレイ感覚を得ることができれば、難しい方法で何かを実装する価値はありません。)
Pongの「偽の」物理学はかなり単純なはずです。これは非常に基本的なものであり、必ずしも完全ではない単純な物理学です。
Vector2 position;
Vector2 velocity;
protected override void Update(GameTime gameTime)
{
position += velocity * (float)gameTime.ElapsedGameTime.TotalSeconds;
if((IsInsideLeftBat(position) && velocity.X <= 0)
|| IsInsideRightBat(position) && velocity.X >= 0)
{
velocity.X = -velocity.X; // Bounce the other way
// To change things up, maybe you can change velocity.Y too.
}
// And of course handle the ball going out of the play field, scoring, etc...
}
さて、ゲームに実際の物理学が本当に必要だとしましょう。本当の物理学を使ったポンゲームは楽しいかもしれません(実際、誰かがすでにそれをやっています、もっと本当です)。
「偽造」について私が言ったことは今でも当てはまります。ゲームの物理学は通常、実際のリアリズムよりも正しいと感じるものを得るために物事を微調整することです。おそらく、バウンス係数を1.1に増やし、ボールが制御不能に飛ばないように、ボールに線形抗力を追加する必要がありますか?
(または、ボールを反対側に移動するのに問題がある場合は、線形抗力を減らしてみてください。)
実際、ゲームの「メインキャラクター」の可能性が高いのは、物理シミュレーションでそれを保持して、物事と相互作用できるようにすることです(おそらく、プレイフィールドに障害物が散らばっています-それは楽しいかもしれません)-しかし、その動きを完全に制御できます。
これを簡単に行うには、物理エンジンの更新を実行した後、入って、気に入らない値を変更します。Pongの場合、これはボールの速度をリセットしてフレームごとに一定の速度で移動するような単純なものである可能性があります。パドルに対して、フレームごとに位置を設定するために、すでにこのようなことをしていると思います。
(私は物理エンジンでプラットフォーマーを作ったときにこのアプローチを使用しました。)
物事を偽造する別の代替方法は、ボールの速度を好きなように設定する衝突ハンドラーをパドルに追加することです。