6

ドライブゲームを作っています。ビューはパースペクティブ 1 であり、プレーヤーのパースペクティブは前進する車の後ろからのものです。車が前進しているとき、周囲のすべての環境が下に移動してスケールします (これは今ではかなり見栄えがよくなっています)。これにより、車が前進しているような印象を与えます。ここで、上向きの矢印を放したときに車が速度を上げてから徐々に減速するように、いくつかの現実的な運転制御を行いたいと考えています。現在、上矢印が押されたときに、いくつかのスプライトのすべての移動関数を呼び出します。車が遅いときなどに関数が頻繁に呼び出されないように、これを制御する方法を探しています。これまでのコードは次のとおりです。

   protected void Drive()
    {
        KeyboardState keyState = Keyboard.GetState();

        if (keyState.IsKeyDown(Keys.Up))
        {
            MathHelper.Clamp(++TruckSpeed, 0, 100);
        }
        else
        {
            MathHelper.Clamp(--TruckSpeed, 0, 100);
        }

        // Instead of using the condition below, I want to use the TruckSpeed
        // variable some way to control the rate at which these are called 
        // so I can give the impression of acceleration and de-acceleration.

        if (keyState.IsKeyDown(Keys.Up))
        {
            // Lots of update calls in here
        }
   }

これは簡単だと思ったのですが、どういうわけか意味がわかりません。ここで助けていただければ幸いです。ありがとう

4

3 に答える 3

4

++最初の提案は、 and を使用しないでください--。をTruckSpeed掛けた割合で増加させますDelta Time。これは、加速と減速が低速のコンピューターでも高速のコンピューターでも同じように機能し、フレーム レートのヒックアップとは無関係であることを意味します。ゲームプレイをより適切に制御するために、さまざまな増加率と減少率を設定することもできます。

次のようなもの:

protected void Drive(GameTime gameTime) // Pass your game time
{
    KeyboardState keyState = Keyboard.GetState();
    if (keyState.IsKeyDown(Keys.Up))
    {
        TruckSpeed += AccelerationRatePerSecond * gameTime.ElapsedGameTime.TotalSeconds;
    }
    else
    {
        TruckSpeed -= DecelerationRatePerSecond * gameTime.ElapsedGameTime.TotalSeconds;
    }
    MathHelper.Clamp(TruckSpeed, 0, 100);
    ...

また、おそらく交換できます

if (keyState.IsKeyDown(Keys.Up))

if (TruckSpeed > 0)

環境全体をトラックの周りに移動するのではなく、カメラをモデルに取り付けて環境内で移動する方がおそらく簡単です...

于 2013-01-25T22:24:45.967 に答える
0

最も簡単で正しいアプローチは、キーボード制御を物理から分離することです。変化/単位時間ごとの変化ではなく/ボタンクリックごとに加速度を測定したい。前回の更新からの経過時間に応じて速度を変更する必要がある反復のたびに...

于 2013-01-25T22:31:38.810 に答える
0

加速は直線的ではありません。そのため、++ または -- 演算子を使用しないことをお勧めします。代わりに、時間の経過に伴う速度の変化 (デルタ V)/時間を計算する関数を呼び出します。本当の加速感が欲しいなら、そのための何かを考えるかもしれません。

于 2013-01-25T22:31:40.257 に答える