現在、XNAゲームで、保存が完了するとイベントを発生させる保存システムに取り組んでいます。
私のゲームには、画面マネージャーによって管理される複数の画面があり、各画面には独自のUpdateメソッドとDrawメソッドがあります。
コンストラクターでは、私の_newSaveブール値にtrueのフラグが付けられ、このブール値はゲームの保存プロセス(ヘルパーによって管理されます)を開始し、プロセスを開始すると、常にループするのを防ぐためにfalseのフラグが付けられます(保存画面ごとに1回保存します)。
ヘルパーが保存を終了すると、イベントを発生させてSaveScreenクラス内に戻り、_newSaveをtrueに戻し、ScreenManagerに画面を変更するように指示します。
ゲームをプレイすると、2回目の保存まで、すべてが正しく機能しているように見えます。この保存を試みると、ゲームがフリーズします。このブール値はプライベートであり、この方法では4回しか使用されていないことに注意してください(Visual Studioで確認のために使用されています)
class SaveScreen : LoadingScreen
{
private bool _newSave;
private Player _player;
public SaveScreen(EventHandler screenEvent, ContentManager Content, GraphicsDevice GraphicsDevice, Player player)
: base(screenEvent, Content, GraphicsDevice)
{
screenTexture = Content.Load<Texture2D>("saving");
_newSave = true;
this._player = player;
helper.FinishedSaving = new EventHandler(FinishedSaving);
}
public override void Update(GameTime gameTime)
{
if (_newSave)
{
helper.RequestSave(_player);
_newSave = false;
}
helper.UpdateSaving();
base.Update(gameTime);
}
private void FinishedSaving(object o, EventArgs e)
{
_newSave = true;
screenEvent.Invoke(this, new EventArgs());
}
}
FinishedSavingイベント内にブレークポイントがあり、boolがtrueに変更されていることを確認しました。これは正しいですが、ifステートメントの次の保存サイクルの次のブレークポイントはboolがfalseであることを示しています。
アクセスするにはtrueである必要があるifステートメント内に唯一の_newSave=falseステートメントがあるため、これには完全に混乱しています。イベント内のブレークポイントは、それがtrueであることを示していますが、更新の最初の「新しい」ループ上にあります。コード、それは誤りです。
私は本当にこれで髪を抜いていて、何が起こっているのか理解できません。
どんな助けでも大歓迎です、そしてそれが何かばかげているなら申し訳ありません、私は比較的新しいプログラマーです:)
ありがとう!<3
編集:Helper.csクラス全体のPastebin:http: //pastebin.com/uJ0g6e00
ロード画面クラス:pastebin.com/8W8HxBnq
画面クラス:pastebin.com/qr29gzuq