2011-07-23 5 views
0

ゲームデータをシリアル化しようとしています。ユーザーがWindowsボタンを押した場合は、すべてを保存する必要があります。私は、ゲームクラスのOnExitingイベントをオーバーライドする必要があることを知っています。 Game State Managementを使用していますので、GamePlayScreenクラスでゲームデータをシリアル化したいと思います。私はSerializeメソッドとDeSerializeメソッドをオーバーライドしましたが、それらは動作しませんでした。 WindowsのGameStateManagmentによるデータのシリアル化

彼女に私のコード:

public override void Serialize(Stream stream) 
    { 
     gameState.HumanPlayer = HumanPlayer; 
     gameState.Player1 = AIPlayer1; 
     gameState.Player2 = AIPlayer2; 
     gameState.Player3 = AIPlayer3; 
     XmlSerializer serializer = new XmlSerializer(typeof(GameState)); 
     serializer.Serialize(stream, gameState); 
     base.Serialize(stream); 
    } 

    public override void Deserialize(Stream stream) 
    { 
     XmlSerializer serializer = new XmlSerializer(typeof(GameState)); 
     gameState = (GameState)serializer.Deserialize(stream); 

     if (gameState.HumanPlayer != null) 
      HumanPlayer = gameState.HumanPlayer; 
     if (gameState.Player1 != null) 
      AIPlayer1 = gameState.Player1; 
     if (gameState.Player2 != null) 
      AIPlayer2 = gameState.Player2; 
     if (gameState.Player3 != null) 
      AIPlayer3 = gameState.Player3; 

     base.Deserialize(stream); 
    } 

は、私は自分のIsolatedStorageFileの代わりに提供ストリームオブジェクトを作成しようとしましたが、それは仕事をdidntの。

LoadとUnloadイベントで同じコードを書き込もうとしました。そこではうまく動作しますが、戻るボタンを押した場合にはうまくいきます。ユーザーがWindowsボタンまたは検索ボタンを押した場合は、シリアル化する必要があります。

答えて

1

OnDeactivatedOnActivatedイベントを処理する必要があるようです。 OnExitingイベントとコンストラクターで行われているのと同じことを実行してください。私は、墓石/再水和物の適切な取り扱いがWP7のような大きなものだとしてサンプルがこれを行うと思っていただろうが、それは無視されているようだ。 OnActivatedは、アプリの起動時には呼び出されず、OnDeactivatedは、アプリを手動で閉じるか、戻るボタンを使用して終了したときに呼び出されません。

注ONLY実際のオープン、終了状況で呼び出されLaunchingClosingとともにPhonApplicationServices.Currentのイベント、なども利用可能ActivatedDeactivatedエリアいます。

EDIT [OK]を戻します。 OnDeactivatedおよびOnActivatedは必須ではありません。 OnExitingはDeactivateシナリオとExitシナリオの両方で起動されているようです。

public override void Serialize(System.IO.Stream stream) 
{ 
    System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(typeof(string)); 
    serializer.Serialize(stream, "Blah de blah blah"); 
    base.Serialize(stream); 
} 

public override void Deserialize(System.IO.Stream stream) 
{ 
    System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(typeof(string)); 
    string testStr = (string)serializer.Deserialize(stream); 

    base.Deserialize(stream); 
} 

ブレークポイントをので、あなたの問題はどのようになっている必要があり、逆シリアル化メソッドが正常に機能してヒットされていることを示しています。私はあなたが(XNA4 WP7ではなく、マンゴーバージョン)をリンクしてGameplayScreenにこのコードを入れてサンプルをダウンロード読み込んだデータを適用するか、それを壊した他のコードを編集したことがあります。

+0

ありがとうございます!不思議なことに、私は私の窓を再起動した後に働いた!私は、エミュレータといくつかの問題を考える、ありがとう! – Ateik

関連する問題