在我認爲成功編寫了一個xml文檔之後,xna拒絕加載它說「XML不在XNA中間格式中,缺少XnaContent根元素」。 對類似問題的一些答案提示更改屬性,但最終我希望此文件在運行時創建並在運行時讀取。 除了十幾個stackoverflow的答案,我也閱讀了大部分有關XmlDocument的msdn條目 - 沒有找到一個神奇的「PutDocInIntermediateXNAFormat」方法,真是一個驚喜(我當然沒有找到一個字面上的名字)。 我確定我只是錯過了最簡單的部分所有Youtube視頻關於創建一個我只是假設知道的XML文件。 因此,在我浪費更多時間之前,有誰能請抓住我的手,並引導我嗎?C#如何在代碼中編寫xml文件,以便xna接受加載它?
編輯: 它接縫xna並不滿意我試圖使用不對應於底層類的xml文件。我怎樣才能讓它加載不管?
編輯2:
我做了一個類,並使用這個類的XML文件。我沒有問題將它保存爲一個XML文件,也沒有加載到類實例。 但是我確實有一個問題,那就是使用這些xml文件作爲xna的資源。
下面是類:
namespace TheLemmingsGuideToMagrathea
{
public class LevelSave
{
public int lemmingsToSpawn;
public int lemmingsToSave;
public int remainingStairs;
public int remainingQuests;
public int remainingGuidesv2;
public int remainingThumps;
public int remainingConciousnesses;
public string[] map;
public Point start;
public Point finish;
public int timeInSeconds;
}
}
下面是從該類生成XMLFILES的代碼:
LevelSave save = new LevelSave();
save.map = level.Stringify();
save.start = startLocation;
save.finish = finishLocation;
save.lemmingsToSpawn = 50;
save.lemmingsToSave = 25;
save.timeInSeconds = 5 * 60;
save.remainingStairs = 10;
save.remainingQuests = 10;
save.remainingGuidesv2 = 10;
save.remainingThumps = 10;
save.remainingConciousnesses = 10;
XmlSerializer serializer = new XmlSerializer(typeof(LevelSave));
if (!Directory.Exists(Path.Combine("Content", "Levels")))
Directory.CreateDirectory(Path.Combine("Content", "Levels"));
if (!Directory.Exists(Path.Combine("Content", "Levels", levelNameTextBox.Text)))
Directory.CreateDirectory(Path.Combine("Content", "Levels", levelNameTextBox.Text));
StreamWriter writer = new StreamWriter(Path.Combine("Content", "Levels", levelNameTextBox.Text, levelNameTextBox.Text + ".xml"));
serializer.Serialize(writer, save);
writer.Close();
這裏是由代碼生成的一個XMLFILE:
<?xml version="1.0" encoding="utf-8"?>
<LevelSave xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<lemmingsToSpawn>50</lemmingsToSpawn>
<lemmingsToSave>25</lemmingsToSave>
<remainingStairs>10</remainingStairs>
<remainingQuests>10</remainingQuests>
<remainingGuidesv2>10</remainingGuidesv2>
<remainingThumps>10</remainingThumps>
<remainingConciousnesses>10</remainingConciousnesses>
<map>
<string> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0</string>
<string> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0</string>
<string> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0</string>
<string> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0</string>
<string> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0</string>
<string> 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0</string>
<string> 0, 0, 80, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0</string>
<string> 0, 0, 0, 80, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0</string>
<string> 0, 0, 0, 0, 80, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0</string>
<string> 0, 0, 0, 0, 0, 80, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0</string>
<string>11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11</string>
<string>10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10</string>
<string>10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10</string>
<string>10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10</string>
<string>10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10</string>
<string>10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10</string>
<string>10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10</string>
<string>10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10</string>
<string>10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10</string>
<string>10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10</string>
</map>
<start>
<X>1</X>
<Y>9</Y>
</start>
<finish>
<X>19</X>
<Y>2</Y>
</finish>
<timeInSeconds>300</timeInSeconds>
</LevelSave>
我嘗試加入
<XnaContent> <Asset Type ="LevelSave">
個手動標籤,它確實修復了它,並最終讓我編譯 - 除非它不。它現在給出了錯誤There was an error while deserializing intermediate XML. Cannot find type "LevelSave".
(我不嘮叨不能用作內容了,儘管如此。)
我精神上完成了,請幫助我。
你能張貼您的XML和它基礎類將保存你想要導入的數據?我曾經經常成功地使用XNA和XNA。我發現人們最常見的問題是建立秩序。在內容處理器嘗試將文件轉換爲xnb之前,主要不構建將包含XML數據的基礎類。您的數據類是否在您的遊戲項目構建/運行之前建立的自己的項目中?不是說這是問題,但請發佈,我們會看看。 –
這很有趣!我根本沒有使用底層類 - 我想要做的只是保存視頻中的少量數據(我發現即使是新波士頓在其教程中沒有底層類也很令人震驚)。是否有可能沒有做?我是否應該將問題名稱更改爲包含我想在沒有課程的情況下加載? – harlekintiger
這篇博文介紹瞭如何讓內容處理器將XML構建爲可在XNA中使用的xnb文件的基礎知識:https://blogs.msdn.microsoft.com/shawnhar/2009/03/25/automatic-xnb- serialization-in-xna-game-studio-3-1 /這是博客索引,您可以在其中找到該博客以及許多其他與XNA一起工作時必不可少的內容:http://www.shawnhargreaves.com/blogindex.html –