すべてのゲームまたは特定のクラスを一時的にフリーズする機能はありますか?
MatlabのようなWait関数を探しています。
ありがとう。
編集:待機機能は、指定された時間の間、すべての処理を停止します。
ゲームを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);
}
}
ゲームコンポーネントを使用したことがない場合は、クラスに有効フラグを導入し、更新ロジックを実行する前にそれを確認するのは非常に簡単です。
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();
}
非常に簡単な方法を探している場合(Andyの方が良いようですが、これは簡単な方法です)
更新メソッドクラスで、上部に次を追加します。
if (isPaused)
break;
isActiveを使用して、ウィンドウもアクティブであるかどうかを確認できます。