ゲームループ内でゲームを一時停止する


12

ゲームループ内では、Pを押すとゲームが一時停止します。つまり、ゲームループは実行されなくなります。問題は、このループが停止した後、ループ自体の中にあったため、ループを再開するためにPを再度押すことができないことです。Pをもう一度押すとループが再び機能するようにするにはどうすればよいですか?

回答:


20

ゲームを一時停止するときに、実際にゲームループを停止しないでください。代わりに、bool変数を追加する必要があります。bool変数は、ゲームが一時停止されているかどうかに応じてtrue / falseに変更されます。ゲームが一時停止した場合、ゲームの更新を停止するだけで済みますが、入力から更新を取得するなど、現在のフレームのレンダリングを続けることができます。

if(gameIsPaused == false)
{
    // run updates
}
checkInput();
render();

checkInput一時停止モードと一時停止解除モードでは異なる機能が必要になる場合があります。これは、一方のモードまたは他方のモードでのみ使用できるコントロールがあるためです。checkInput一時停止モードの機能は、P押されてから設定されるかどうかを確認するだけの場合がありますgameIsPaused = falseが、一部のゲームは一時停止画面に追加の機能を追加しますゲームはメニュー画面と組み合わせるのが好きです)。
フィリップ

1
一般的に私はあなたの答えに同意しますが、一時停止状態でいくつかの更新を実行することが完全に有効である場合があることを明示的に述べる必要があると思います。たとえば、メニュー項目のアニメーション化、またはおそらくオーディオ管理。大きなアイデアは、一時停止条件により、別のcheckInput/ render/ update呼び出しのセットに分岐できることです。
ニコラスミラー

ゲームを一時停止する必要があるのは、「更新ワールド」ビットをスキップすることだけです。他のすべての機能はおそらく通常どおり維持する必要があります。
Mooingダック

4
これはゲームプログラミングの非常に基本的なものであり、質問者を混乱させたくなかったため、答えをできるだけシンプルにしようとしました。
カツ

1
@ user3730788:ゲームループごとに1回(つまり、1秒あたり100回未満)実行されるブランチは、毎回予測が誤っいても、認識できるパフォーマンスへの影響はありません。
イルマリカロネン

1

Pを押すと、ゲームの状態「一時停止」を処理する別のループに切り替わり、Pをもう一度押すと元のゲームループに戻ることができるようになります。

これを実際にゲームループ自体に入れて状態変数を導入することができます。必要に応じて、ループをオフにする代わりに、状態変数はループ内のそれぞれの状態固有のコードの実行を切り替えます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.