我还是个新手。我尝试了互联网上的一个教程,关于如何在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)“上显示了未经处理的窗口;
显示"Value不能为空,参数名: text“
有人知道如何解决这个问题吗?
发布于 2011-10-23 18:23:10
似乎在代码中的任何地方都不会调用LoadFromFile()。尝试在LoadContent()方法中调用LoadFromFile();。如果XML文件不是空的,它应该可以工作。导致该错误的原因是"credits“字符串在绘制时为null (未分配任何值)。
发布于 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。
https://stackoverflow.com/questions/7865453
复制相似问题