2011-08-07 20 views
1

私はトップ10のスコアの基本的なハイスコアリストを実装しようとしています。それはxbox/pcにローカルに保存するだけで、ネットワーキング/グローバル同期は必要ありません。下のリンクをxna4にアップデートしようとしましたが、どちらのフォーマットでもシリアライズエラーが発生しました。またスコアデータを素敵なスクリーンフォーマットにプルする際の問題もありました。 http://xnaessentials.com/tutorials/highscores.aspx/tutorials/highscores.aspxXNA基本的なハイスコアリスト

また、ゲームパッドを使用してプレーヤー名を入力する方法はありますか? (プロファイル名を使用しない)

ありがとう ポール。

+0

ハイスコアリストを保存したり読み込んだりするときにエラーが発生しましたか?また、エラーの詳細を教えてください。あなたはXMLシリアル化を使いたいと思っています。チュートリアルは私のように思えます。 –

+0

私はTitle.LocationでPath.Combine行を更新し、パス "/content/hi.lst"をハードコーディングしました。これはPCで正常に動作します。それは動作し、ほとんどの時間をロードして保存しますが、 "XML文書(52、17)にエラーがあります"というエラーが表示されます - ファイルの最後の位置で余分な>シンボルが追加されます - ファイルが更新/上書きされているように見えますが、元の位置には少しずれています.File.Writeに更新しようとしましたが、OpenorCreateの代わりにCreateを実行しましたが、これはエラーを変更しません。 – Paul

答えて

0

ご覧のとおり、HighScoreDataの定義には、配列要素への参照のみが含まれています。要素自体は、コンストラクタで初期化されているため、定義されていません。 XmlSerializerは、countが何であるか分からず、パラメータ化されたコンストラクタを呼び出すこともできません。 HighScoreDataはstructなので、パラメータのないコンストラクタを定義することはできません(また、「舞台裏で」行われているのは配列要素を作成していません)。

HighScoreDataclassに変更し、パラメータのないコンストラクタを作成するという解決策(できるだけコードの変更が少ない)は、後者を行うには、配列のサイズを事前に決定する必要があります。したがって:

public class HighScoreData 
{ 
    public string[] PlayerName; 
    public int[] Score; 
    public int[] Level; 

    public const int MaxScores = 100; 

    public HighScoreData() 
    { 
     PlayerName = new string[MaxScores]; 
     Score = new int[MaxScores]; 
     Level = new int[MaxScores]; 
    } 
}