XNA是如何加载XML的

时间:2011-10-23 09:57:36

标签: xna

我还是新手...... 我尝试了一个来自互联网的教程,关于如何在XNA游戏工作室中加载XML

我的代码是这样的:

  using System;
  using System.Collections.Generic;
  using System.Linq;
  using Microsoft.Xna.Framework;
  using Microsoft.Xna.Framework.Audio;
  using Microsoft.Xna.Framework.Content;
  using Microsoft.Xna.Framework.GamerServices;
  using Microsoft.Xna.Framework.Graphics;
  using Microsoft.Xna.Framework.Input;
  using Microsoft.Xna.Framework.Media;
  using System.IO;

 namespace textInput
{

public class Game1 : Microsoft.Xna.Framework.Game
{
    GraphicsDeviceManager graphics;
    SpriteBatch spriteBatch;
    SpriteFont SpriteFont1;
    string credits;

    public Game1()
    {
        graphics = new GraphicsDeviceManager(this);
        Content.RootDirectory = "Content";


    }


    protected override void Initialize()
    {


        base.Initialize();
    }


    protected override void LoadContent()
    {

        spriteBatch = new SpriteBatch(GraphicsDevice);
        SpriteFont1 = Content.Load<SpriteFont>("SpriteFont1");

    }


    protected override void UnloadContent()
    {

    }

    public string LoadFromFile()
    {

        using (System.Xml.XmlReader reader = System.Xml.XmlReader.Create("XMLFile1.xml"))
        {
            reader.MoveToContent();
            reader.ReadToFollowing("credit");
            credits = reader.ReadInnerXml();
        }
        return credits;
    }



    protected override void Update(GameTime gameTime)
    {

        if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
            this.Exit();

        base.Update(gameTime);


    }


    protected override void Draw(GameTime gameTime)
    {
        GraphicsDevice.Clear(Color.CornflowerBlue);

        spriteBatch.Begin();
        spriteBatch.DrawString(SpriteFont1, credits, new Vector2(20, 40), Color.White);
        spriteBatch.End();
        base.Draw(gameTime);
    }

}
}

当我调试它时,ArgumentNullException是未处理的窗口显示“spriteBatch.DrawString(SpriteFont1,credits,new Vector2(20,40),Color.White);”

它说,“价值不能为空。 参数名称:text“

任何人都知道如何清除这个问题???

2 个答案:

答案 0 :(得分:0)

似乎没有在代码中的任何地方调用LoadFromFile()。尝试调用LoadFromFile();在LoadContent()方法中。如果XML文件不为空,它应该可以工作。 导致错误是因为“信用”字符串在绘制时为空(没有赋值给它)。

答案 1 :(得分:0)

我认为你应该使用XElement等方法,相反,它们可以让你更好地控制xml数据。您可以将整个xml文件读入一个父xelement,如:
XElement input = XElement.Load("path-to-xml");

当你的xml看起来像:

<?xml version="1.0" encoding="utf-8"?>
<master-elem>
 <some-elem some-attr="x">
  y
 </some-elem>
</master-elem>

您的整个xml文件将成为输入元素 你可以获得带有input.Element("master-elem")
的主元素,它返回一个包含master-elem中所有元素的XElement。当然,您可以在链中调用它并获取元素的任何值或元素的属性。喜欢:
input.Element("master-elem").Element("some-elem").Attribute("some-attr").Value
如果你有更多的数据,我建议看一下linq,就像对象的sql一样。