1

そのため、エンジンの使用方法を学ぶために Box2D で Pong を再作成しようとしてきましたが、Box2D で Pong を作成するのは思ったよりも複雑だと思います。私は衝突をそれ自体で落とし、ボールの反発を 1.0 に設定しました。私の唯一の問題は、ボールをパドルに当て、正しい角度で跳ね返らせ、反対側に到達するのに十分な速度を持たせる方法がわからないことです。自然な Pong Game のように見せたいだけです。私は c++,actionscript を見てきましたが、ポン ゲームを完全に実装した人は誰もいないようです。

独自の物理演算を実装する必要がありますか?

4

2 に答える 2

6

基本的に、本物の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の場合、これはボールの速度をリセットしてフレームごとに一定の速度で移動するような単純なものである可能性があります。パドルに対して、フレームごとに位置を設定するために、すでにこのようなことをしていると思います。

(私は物理エンジンでプラットフォーマーを作ったときにこのアプローチを使用しました。)

物事を偽造する別の代替方法は、ボールの速度を好きなように設定する衝突ハンドラーをパドルに追加することです。

于 2010-06-23T01:57:13.967 に答える
0

の他の答えは、物理エンジンを使用してゲームを作成するときにも当てはまります。しかし、私はあなたが言うことにも気づきました:

ボールの反発力を1.0に設定しています

パドルの返還も1.0に設定されていますか?Box2Dはチェックしていませんが、Farseer(手元にあり、Box2Dに関連するもの)では、衝突応答で使用される復元力を平均として計算しました(Arbiter.csから)。

_restitution = (GeometryA.RestitutionCoefficient
               + GeometryB.RestitutionCoefficient) * .5f;

Box2Dが同じように機能する場合は、おそらく機能しません(コメントのMarkに感謝します)。必要な効果を得るには、パドルも復元を1.0に設定する必要があります。

(また、これは、物理エンジンのソースコードを手元に用意することがどのように役立つかを示しています。)

于 2010-06-23T02:16:16.483 に答える