[英]XML XNA Object Deserialization
我在XNA 3中構建游戲,並且我以XML格式存儲了級別。 您建議將這些XML文件反序列化為級別對象的解決方案是什么? 它需要能夠在Xbox上工作。
我沒有在360上試過它(我打賭它會起作用),但是XmlSerializer是一種將對象圖保存/加載到XML中的一種非常簡單的方法。 基本上,您獲取xml文件並對其運行xsd.exe。 這將生成一組C#類,您可以將XML反序列化為。 在您的代碼中,您將編寫如下內容:
var serializer = new XmlSerializer(typeof(LevelType));
var level = (LevelType)serializer.Deserialize(streamToYourLevel);
全部做完。
我不認為二進制序列化可用於Zune和XBox,但XmlSerializer對我來說很好。 序列化集合沒有問題,但是你必須對像ArrayList這樣的無類型集合使用XmlArrayItem屬性,或者將附加類型信息傳遞給XmlSerializer構造函數,但現在使用List更好更簡單。 字典無法序列化,但您可以為其創建包裝類。 我通常為每個項目存儲一個唯一的ID,然后可以將其用作字典中的鍵。 然后我可以創建一個包裝詞典但暴露為項目集合的類。
public class MyItem {
public string ID { get; set; }
:
}
public class MyList : ICollection<MyItem> {
private Dictionary<string,MyItem> items;
public MyList() {
items = new Dictionary<string, MyItem>();
}
void Add(MyItem item) {
items.Add(item.ID, item);
}
:
}
我不建議(de)序列化實際級別,只需創建一個包含從中構造級別對象的信息的簡單容器類。
就像是:
[Serializable()]
public class LevelDefinition
{
public Vector3 PlayerStartPosition { get; set; }
public string LevelName { get; set; }
public List<Enemy> Enemies { get; set; }
... etc
}
這將產生漂亮,干凈的XML。
然后只需使用XmlSerializer
類對其進行反序列化。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.