Monogame内容管道工具无法将XML数据编译到XNB

时间:2015-09-04 19:35:08

标签: c# xml monogame

我是Monogame内容管道工具的新手,而不是XNA,它可以自己进行编译。所以我可能有一个非常简单的问题,我没有看到解决方案。这是我的XML文件:

<?xml version="1.0" encoding="utf-8"?>
<XnaContent xmlns:ns="Microsoft.Xna.Framework">
  <Asset Type="Game1.Screens.SplashScreen">
    <SplashScreen>
      <Path>Images/Image1</Path>
    </SplashScreen>
  </Asset>
</XnaContent>

所以我不完全确定<Asset Type="...">想要什么作为一个值,但是调试器告诉我那里有一个错误: Could not resolve type 'Game1.Screens.SplashScreen'.所以这是我正在观看的简单教程:

The Tutorial

有人决定教授如何使用XML序列化。所以他正在使用XNA,但是大部分代码也适用于Monogame。无论如何,他所做的是,在Content.RootDiretory之外的文件夹中添加一个新的XML文件,并在那里添加了他的XML文件。由于我从未发布过使用Monogame的项目,所以如果我错了,请更正我,但不会因为Copy always to output directory设置为Build的XML文件是用户可见/可编辑的吗?或者它会被压缩成XNB?或许它甚至不会被送到那里?这就是问题的根源,现在让我们看看顶部:

由于无法回答自己XML文件是否实际出现在最终产品的Content目录中,我决定使用Content管道工具并从那里添加上面的XML文件,因为我确信它将被转换为XNB。但现在我收到了这个错误。而且我不知道我错在哪里?我应该将文件的构建操作从默认的Copy设置为SplashScreen,但错误消失了,但XML文件将位于我的Content目录而不是XNB目录中。请指教。

以下是有关GameScreen课程的更多信息: 它继承自另一个类Screens。 它位于项目文件夹内的Game1.Screens.SplashScreen文件夹中。这就是我尝试使用Game1的原因,其中var refreshtimeout1; var lastData = ''; function getstate(handleData) { $.ajax({ type: "GET", url:"currentstate.php", success:function(data) { handleData(data); console.log('Used getstate. Output: '+data); } }); } function refreshstate(){ return getstate(function(output){ var data=JSON.parse(output); // <-- THIS! console.log('Refreshed state successfuly. Parsed output: '+data); console.log('Last parsed output: '+lastData); lastData = data; }); } refreshtimeout1=setInterval(refreshstate, 5000); 是我项目的名称。

提前致谢!

1 个答案:

答案 0 :(得分:1)

你的直觉是正确的。教程的版本必须使用xml文件发布游戏。但Xna内容管道可以将其构建为二进制文件以运送您的游戏,运行时内容管道可以将其加载到您的游戏中。

当它将它加载到你的游戏中时,它需要知道数据适合哪个类,以便它可以将数据插入到该类的实例中

Class MyGameInitialConfiguration
{
  public string path; 
  /*
   other possible game settings can be added too
   public float heroPower;
   public string badGuyName;
  */
}

//然后在xml文件中

<asset type=MyGameInitialConfiguration>

现在,由于构建过程所做的第一件事就是构建组件(将fbx转换为xnb,将图像转换为xnb,将xml转换为xnb),需要知道之前的“MyGameInitialConfiguration”是什么你点击运行...但是如果你把这个类添加到游戏项目中,它就不会在它需要它之前构建它并且你会得到一个错误。

因此,您必须在解决方案中添加一个额外的项目来保存此类并使您的游戏项目和内容项目依赖于它,因此它是第一个构建的项目。然后,当游戏项目运行时,它会知道“MyGameInitialConfiguration”是什么,并可以将日期加载到其中。

显然,您可以从游戏代码中访问该类实例,并从中拉出“路径”。

以下是XNA knowledege的最终结果:http://www.shawnhargreaves.com/blogindex.html

特别是,此博客:http://blogs.msdn.com/b/shawnhar/archive/2009/03/25/automatic-xnb-serialization-in-xna-game-studio-3-1.aspx

谢谢你这个问题,把我带回了这么多年。 Xna内容管道非常棒。