XNA как загрузить XML - PullRequest
       5

XNA как загрузить XML

0 голосов
/ 23 октября 2011

Я все еще новичок здесь ... Я попробовал учебник из Интернета, о том, как загрузить XML в игровую студию XNA

мой код так:

  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);» *

говорит: «Значение не может быть нулевым. Параметримя: текст "

кто-нибудь знает, как решить эту проблему ???

Ответы [ 2 ]

0 голосов
/ 21 декабря 2012

Я думаю, что вы должны использовать методы XElement и т. Д., Потому что они дадут вам намного лучший контроль над данными XML. Вы можете прочитать весь XML-файл в один родительский элемент, например:
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, который содержит все элементы в master-elem. Конечно, вы можете вызвать его в цепочке и получить любое значение элемента или атрибут элемента. как:
input.Element("master-elem").Element("some-elem").Attribute("some-attr").Value
если у вас больше данных, я предлагаю взглянуть на linq, который похож на sql для объектов.

0 голосов
/ 23 октября 2011

Кажется, LoadFromFile () не вызывается нигде в вашем коде. Попробуйте вызвать LoadFromFile (); в методе LoadContent (). При условии, что файл XML не пустой, он должен работать. Ошибка вызвана тем, что строка "credits" является нулевой (ей не присвоено значение) во время отрисовки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...