Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过Monogame内容管道加载XML文件?_C#_Xml_Xna_Monogame - Fatal编程技术网

C# 通过Monogame内容管道加载XML文件?

C# 通过Monogame内容管道加载XML文件?,c#,xml,xna,monogame,C#,Xml,Xna,Monogame,我目前正在尝试将我正在开发的一款游戏从XNA移植到Monogame,但我在让内容管道合作方面遇到了一些困难。我的游戏使用大量XML文件作为XNB资产来表示游戏中的对象,我按照说明创建了这些对象。但是,试图将其逐字移动到Monogame会产生以下错误: MonoGame.Framework.dll中发生类型为“Microsoft.Xna.Framework.Content.ContentLoadException”的未处理异常 其他信息:无法将Parts\Window.xnb资产作为非内容文件加载

我目前正在尝试将我正在开发的一款游戏从XNA移植到Monogame,但我在让内容管道合作方面遇到了一些困难。我的游戏使用大量XML文件作为XNB资产来表示游戏中的对象,我按照说明创建了这些对象。但是,试图将其逐字移动到Monogame会产生以下错误:

MonoGame.Framework.dll中发生类型为“Microsoft.Xna.Framework.Content.ContentLoadException”的未处理异常

其他信息:无法将Parts\Window.xnb资产作为非内容文件加载

下面是我用来定义XML文件内容的类:

using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.Graphics;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Linq;

namespace FileTypes
{
    public class PartFile
    {
        public struct State
        {
            public Rectangle[] frames;
            public int[] collision;
        }

        public Vector2 size;
        public string image;
        public string defaultState = "default";
        public bool fillBG;
        public int ticksPerFrame;
        public Dictionary<string, State> states;
        public string[] modules;
    }
}
使用Microsoft.Xna.Framework;
使用Microsoft.Xna.Framework.Content;
使用Microsoft.Xna.Framework.Graphics;
使用制度;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用System.Xml.Linq;
命名空间文件类型
{
公共类零件文件
{
公共结构状态
{
公共矩形[]帧;
公共交通碰撞;
}
公共向量2大小;
公共字符串图像;
公共字符串defaultState=“default”;
公共图书馆;
公共帧;
国家公共词典;
公共字符串[]模块;
}
}
以下是项目中的一个XML文件:

<?xml version="1.0" encoding="utf-8" ?>
<XnaContent>
  <Asset Type="FileTypes.PartFile">
    <size>2 3</size>
    <image>Computer</image>
    <defaultState>default</defaultState>
    <fillBG>false</fillBG>
    <ticksPerFrame>7</ticksPerFrame>
    <states>
      <Item>
        <Key>default</Key>
        <Value>
          <frames>
            0 0 40 60
            40 0 40 60
          </frames>
          <collision>
            0 0
            0 0
            0 0
          </collision>
        </Value>
      </Item>
      <Item>
        <Key>active</Key>
        <Value>
          <frames>
            80 0 40 60
            120 0 40 60
          </frames>
          <collision>
            0 0
            0 0
            0 0
          </collision>
        </Value>
      </Item>
    </states>
    <modules>
      <Item>testModule</Item>
    </modules>
  </Asset>
</XnaContent>

2 3
电脑类
违约
假的
7.
违约
0 0 40 60
40 0 40 60
0 0
0 0
0 0
积极的
80 0 40 60
120 0 40 60
0 0
0 0
0 0
测试模块
最后,这里是我用来加载文件的代码示例:

FileTypes.PartFile srcPart = content.Load<FileTypes.PartFile>("Parts\\" + name);
FileTypes.PartFile srcPart=content.Load(“Parts\\”+名称);
有人知道我需要做什么才能让我的代码在Monogame中工作吗?我在互联网上搜索了一段时间,但到目前为止,我还没有找到解决我的问题的方法。或者,如果我一直在处理整个系统的错误,并且有一种更简单的方法来处理我想做的事情,我很乐意听到


提前谢谢

除非我弄错了,否则您需要在文件的“属性”选项卡中将文件的生成操作设置为“内容”,并将“复制到输出目录”设置为“复制到更新的目录”

Content.Load
对xml使用
Microsoft.Xna.Framework.Content.Pipeline.IntermediateSerializer
。Monogame不支持
Microsoft.Xna.Framework.Content.Pipeline
。这意味着您无法反序列化中间xml。

我写了一篇关于使用MonoGame管道加载自定义内容的长篇文章。这是总结

  • 创建一个新项目以容纳内容导入器、处理器和编写器
  • 创建内容导入器
  • 创建内容处理器
  • 创建内容类型编写器
  • 创建内容类型读取器
  • 从管道工具中引用DLL
  • 将内容读入游戏
  • 创建导入器、处理器、读写器与XNA相同。关于这一点,你可以参考


    棘手的部分是让DLL与管道工具一起工作。要将其添加为引用,请查找根树节点的References属性。

    Monogame附带了XML内容处理器。打开内容管道应用程序并添加XML文件;您将看到它具有导入器
    xmlcimporter
    和处理器
    PassThroughProcessor


    看看@craftworkgames,了解如何扩展行为

    我已经这样做了,但恐怕它仍然不起作用。哎呀,只是查看了你发布的链接(我从来没有使用xml作为内容管道数据),我怀疑你在monogame中能否做到这一点,因为它没有内容管道,所以它无法将xml转换为xnb文件,您最好在xna中构建文件,只需将xnb文件复制到您的monogame项目中,然后对其执行上述操作。您的教程链接已断开。找到这篇文章,它似乎是有问题的文章: