2011-07-16 14 views
0

開発中のXNA-Silverlightプロジェクトがあり、XMLコンテンツを追加しようとしています。私は画像を持っていた XNA-Silverlight WP7プロジェクトのXMLコンテンツを逆シリアル化できません

参照XNAゲームライブラリ - - コンテンツプロジェクト

  • Silverlightのプロジェクトが参照する

    1. コンテンツプロジェクト
    2. XNAゲームライブラリ:この前に、私は次のセットアップを持っていましたコンテンツプロジェクトを作成し、Silverlightコードからコンパイルしてロードすることができます。今度はコンテンツプロジェクトにXMLコンテンツを追加しようとしていますが、それを記述するゲームライブラリにコードを記述しようとしていますが、次のエラーが発生するため、何か間違っている必要があります。中間XMLをデシリアライズする際にエラーが発生しました。それから私は、XNAに以下のクラスを持っている

      <?xml version="1.0" encoding="utf-8"?> 
      <XnaContent> 
          <Asset Type="CrystalLib.Map"> 
          <TileSetFile>grassland</TileSetFile> 
          <Dimensions>500 250</Dimensions> 
          <Tiles> 
           ... Lots of integers (500 x 250) 
          </Tiles> 
          </Asset> 
      </XnaContent> 
      

      :私はマップと呼ばれるフォルダがあり、その下に、私は次のXMLファイルを持っているコンテンツプロジェクトでタイプ「CrystalLib.Map」を

      を見つけることができませんゲームプロジェクト(Map.cs):

      using Microsoft.Xna.Framework; 
      using Microsoft.Xna.Framework.Content; 
      
      namespace CrystalLib 
      { 
          /// Represents the data stored in a map file 
          class Map 
          { 
           /// The name of tile set file 
           private string tileSetFile; 
      
           /// The name of tile set file 
           public string TileSetFile 
           { 
            get { return tileSetFile; } 
            set { tileSetFile = value; } 
           } 
      
           /// The dimensions of the map, in tiles. 
           private Point dimensions; 
      
           /// The dimensions of the map, in tiles. 
           public Point Dimensions 
           { 
            get { return dimensions; } 
            set { dimensions = value; } 
           } 
      
           /// Spatial array for the tiles for this map. 
           private int[] tiles; 
      
           /// Spatial array for the tiles for this map. 
           public int[] Tiles 
           { 
            get { return tiles; } 
            set { tiles = value; } 
           } 
      
           /// Retrieves the base layer value for the given map position. 
           public int GetTile(int x, int y) 
           { 
            return tiles[y * dimensions.X + x]; 
           } 
      
           /// Read a Map object from the content pipeline. 
           public class MapReader : ContentTypeReader<Map> 
           { 
            protected override Map Read(ContentReader input, Map existingInstance) 
            { 
             Map map = existingInstance; 
             if (map == null) 
             { 
              map = new Map(); 
             } 
      
             map.TileSetFile = input.ReadString(); 
             map.Dimensions = input.ReadObject<Point>(); 
             map.Tiles = input.ReadObject<int[]>(); 
      
             return map; 
            } 
           } 
          } 
      } 
      

      他に何が必要ですか?

  • +0

    XMLファイルはコンテンツプロジェクトの一部ですか?もしそうなら、Content ImporterとContent Processorには何が設定されていますか? –

    答えて

    3

    ソリューションがビルドされると、コンテンツプロジェクトが最初に構築されています(マップクラスを保持するxnaゲームprojの前)。コンテンツを構築する際には、まだ構築されていないMapクラスを参照しようとしているため、知識はありません。

    マップクラスは、最初にビルドされた別のプロジェクトに移動する必要があります(xnaゲームprojがそれに依存するように設定する必要があります)。そのprojをxna projの参照に追加し、必要に応じていくつかのusingステートメントを追加します。これは、アプリケーションハブの教育部門のすべてのサンプルがそれを行う方法です。

    +0

    +1私を助けました。それを考えなかった。循環参照のためにコンテンツプロジェクトからゲームプロジェクトへの参照を追加することはできませんが、これはそれだけです。たぶん私はそれを逃したが、私はMSDNでそれを読んでいない。ありがとう。 – radbyx

    0

    これは単なる推測ですが、マップクラスは公開する必要はありませんか?あなたのコードの内部にあります。

    関連する問題