我正在XNA中編寫一個小型的2D射擊遊戲,並且我已經決定,爲了能夠在遊戲中實現定製內容,它會加載遊戲對象的定義來自XML文件。當我發現XNA有一個易於使用的XML序列化器時,它變得更加簡單。問題是,我想要序列化的對象是DrawableGameComponent
s。 XNA的XML序列化程序,ContentTypeWriter
類,您擴展以創建自定義內容編寫器,要求該對象有一個沒有參數默認值的構造函數。然而,DrawableGameComponent
的構造函數需要一個Game
對象,並且不會讓對象初始化後設置遊戲。但是,我無法修改ContentTypeWriter
的行爲,但是,要接受非空白構造函數,因爲內容是通過完全不同的方法加載的,我無法覆蓋它。所以基本上我有這個:使用XNA的ContentTypeWriter類將XML DrawableGameComponent作爲XML序列化
class Star : DrawableGameComponent{
public Star(Game game)
: base(game)
{
}
}
ContentTypeWriter
需要一個沒有參數的構造函數。我不能創建一個,因爲那樣我就沒有辦法讓一個Game對象進入Star
類。我只是不讓它DrawableGameComponent
,但我想從主遊戲類,這樣我可以重新使用它們,等等,沒有一個Game
對象,這是荒謬難以分離這些對象。因此,我的問題是,有誰知道如何修改ContentTypeWriter足以允許帶參數的構造函數或任何方法?
我也想過使用XPath或Linq XML類編寫我自己的XML解析代碼,但是如果項目中有任何不遵循XNA架構並且不會構建的XML文件,XNA會拋出一個適合的問題。僅使用類的主要字段和使用裝飾器模式的DrawableGameComponent
版本編寫基類,並僅序列化基類是否合理?我拉着頭髮試圖解決這個問題,並想知道在這種情況下我應該做什麼。