1

すべてのゲームまたは特定のクラスを一時的にフリーズする機能はありますか?

MatlabのようなWait関数を探しています。

ありがとう。

編集:待機機能は、指定された時間の間、すべての処理を停止します。

4

3 に答える 3

2

ゲームをGameComponentsに基づいている場合、通常はEnabledフラグをfalseに設定して、更新ロジックの実行を防ぐことができます。これは明らかに他の要因(クラス更新ロジック外のオブジェクト操作、描画で実行される更新ロジック)に依存します。または他の方法など。)

public class Car : GameComponent
{
    // This logic is only called if the Enabled property is set to true.
    public override void Update(GameTime gameTime)
    {
        base.Update(gameTime);
    }
}

ゲームコンポーネントを使用したことがない場合は、クラスに有効フラグを導入し、更新ロジックを実行する前にそれを確認するのは非常に簡単です。

于 2012-06-11T12:53:12.773 に答える
2

1行のハックは、メインのUpdate()でThread.Sleep(x)を呼び出すことですが、これにより、指定された時間ゲームがハングします。ユーザーはアプリが応答しなくなったと思い、アプリを強制終了して再起動する可能性があります。それはおそらくあなたが望むものではありません。

私がゲームをアーキテクチャする方法では、各主要コンポーネントには、論理的な更新ごとに呼び出される独自のUpdate()(またはTick())メソッドがあります。Update()をしばらく呼び出さないことで、コンポーネントを選択的にフリーズできます。画面の更新、ユーザー入力への応答、サウンド処理など、絶対にフリーズしたくないものがあります。

いくつかのサンプルコード:

// To pause the game for x number of frames, set pauseDelay = to x
int pauseDelay;

public void Update() {
     if (pauseDelay > 0) {
         --pauseDelay;
     }
     else {
         physics.Update();
         ai.Update();
     }
     input.Update();
     sound.Update();
}
于 2012-06-11T18:01:41.923 に答える
1

非常に簡単な方法を探している場合(Andyの方が良いようですが、これは簡単な方法です)

更新メソッドクラスで、上部に次を追加します。

if (isPaused)
break;

isActiveを使用して、ウィンドウもアクティブであるかどうかを確認できます。

于 2012-06-11T17:44:23.287 に答える