私は現在、Allegro 5とboostを使用してC ++ 11で2D RPGを作成しています。
私の目標は、オプションメニューでオプションが変更されたときにゲームの設定を更新することです。ユーザーに強制的にゲームを再開させたくありません。他のゲームでは、解像度を変更したり、フルスクリーンからウィンドウ表示にしたりするときに再起動を必要としないため、私のゲームもそうではありません。以下のシステムの簡略図をご覧ください。
OptionsScreenからゲームオブジェクトを直接呼び出す必要がないことに注意してください。破線は、私が達成しようとしている効果を示すためのものです。システムの別の部分でオプションが変更されたときに、どういうわけかゲームを更新します。
詳細説明
ScreenManagerには、GameScreen
現在存在するすべてのオブジェクトのリストが含まれています。これらは、ポップアップを含むゲーム内のさまざまな画面になります。この設計は、多かれ少なかれC#/ XNAのゲーム状態管理サンプルに準拠しています。
にScreenManager
は、私のGame
オブジェクトへの参照が含まれています。Game
オブジェクトは、ゲームの設定を初期化し、変更します。解像度を変更したい場合は、フルスクリーンにするか、Game
クラスで行うボリュームをミュートにします。
ただし、現在、OptionsScreenはGameクラスにアクセスできません。以下の図を参照してください。
GameScreenはonFinished
、onTransitionStart
およびの3つのイベントを通知できonTransitionEnd
ます。onOptionsChanged
1つの画面だけがそれを行うため、ありません。ScreenManagerはすべての画面をGameScreen
s として処理するため、そのためのイベント処理を設定できません。
私の質問は、OptionsMenuの変更が再起動を必要とせずにすぐに変更されるように、どのようにデザインを変更できるかです。Game
適用ボタンがクリックされたら、オブジェクトの更新をリクエストするのが望ましいでしょう。