我在XNA有一個2D遊戲引擎,開發得很好。它的佈局如下:C#XML序列化和涉及繼承
一箇中央GameManager,包含一個SceneObjectManagers列表(用於分層)。
SceneObjectManager包含SceneObjects的集合,它是一個抽象基類爲對象的ID的字符串(即從列表inehrits,具有運算符[字符串]重載的類)。
有一個SceneObject2D和AnimatedSceneObject2D類,它們在鏈中繼承(2D從SceneObject開始,從2D開始)。它們包含相關信息(位置,源矩形,動畫等)。
然後我有第二個項目(使用引擎的實際遊戲),它具有像PlayerObject,AIObject,FireballScript等,它從SceneObject2D和AnimatedSceneObject2D繼承取決於它需要什麼(如果它顯示,動畫,甚至都不)。
還有更多,但你得到的圖片。
我已經開始解決一個關卡編輯器的想法,因爲寫出幾百到幾千實體發展的含量最高,並通過試驗和錯誤或廣泛的紙數學完美定位他們也只是瘋狂。
相當簡單的概念刷,選擇實體,設置屬性,並最終導出一個XML文件,其中包含每個實體,它們的位置和屬性,ID等等。但問題在於XML序列化本身保存對象。
本質上,我會序列化GameManager,其中包含所有sceneobjectmanagers,其中包含所有場景對象。然後,我可以加載XML文件,這將是我的水平。但是接下來就存在繼承問題,以及包含對象(和接口以及所有這些)的更復雜的對象。
對於每個將成爲基類的類,我看不到自己寫出[XmlInclude(typeof(T))],更不用說更復雜的對象了。
我開始繼承IXmlSerializable,但在爲所有我的對象寫出WriteXml和ReadXml的努力之前,我想知道是否有更好,更簡單的方法來解決這個問題。
我想指出它需要是可移植的格式(因此是XML),因爲我想重新使用編輯器的導出,並進行了一些調整,以用於使用相同類佈局的C++引擎(我正在考慮使用Boost.serialization)。
NetDataContractSerializer解決了XmlSerializer的許多限制;如果可能的話,我建議你在XmlSerializer上使用它。 – Will 2010-11-04 20:02:12