首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XNA如何加载XML

XNA如何加载XML
EN

Stack Overflow用户
提问于 2011-10-23 17:57:36
回答 2查看 761关注 0票数 0

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

我的代码如下:

代码语言:javascript
复制
  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)“上显示了未经处理的窗口;

显示"Value不能为空,参数名: text“

有人知道如何解决这个问题吗?

EN

回答 2

Stack Overflow用户

发布于 2011-10-23 18:23:10

似乎在代码中的任何地方都不会调用LoadFromFile()。尝试在LoadContent()方法中调用LoadFromFile();。如果XML文件不是空的,它应该可以工作。导致该错误的原因是"credits“字符串在绘制时为null (未分配任何值)。

票数 0
EN

Stack Overflow用户

发布于 2012-12-21 06:37:33

我认为你应该使用xml方法,因为它们可以让你更好地控制XElement数据。您可以将整个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")

它返回一个包含主元素中所有元素的XElement。当然,您可以在链中调用它并获取元素的任何值或元素的属性。像这样:

input.Element("master-elem").Element("some-elem").Attribute("some-attr").Value

如果你有更多的数据,我建议你看一看linq,它就像sql for objects。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7865453

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档