2013-02-24 24 views
1
using System; 
using System.Collections.Generic; 
using System.Linq; 
using Microsoft.Xna.Framework; 
using Microsoft.Xna.Framework.Audio; 
using Microsoft.Xna.Framework.Content; 
using Microsoft.Xna.Framework.GamerServices; 
using Microsoft.Xna.Framework.Graphics; 
using Microsoft.Xna.Framework.Input; 
using Microsoft.Xna.Framework.Media; 

namespace Data 
{ 
    public class CompactLevelMap 
    { 
     public string name; 
     public string species; 
     public float weight; 
     public int age; 
    } 
} 

這是CompactLevelMap類(它是臨時的),在它自己的遊戲庫項目中。它被正確導入到我的主遊戲中。XNA XML導入「無法找到類型」Data.CompactLevelMap「。」

這是XML文件:

<?xml version="1.0" encoding="utf-8" ?> 
<XnaContent> 
    <Asset Type="Data.CompactLevelMap"> //The error occurs here 
    <name>sdf</name> 
    <species>sdf</species> 
    <weight>32</weight> 
    <age>12</age> 
    </Asset> 
</XnaContent> 

我這個加載到遊戲的方式是

CompactLevelMap compactLevel = new CompactLevelMap(); 

compactLevel = Content.Load<CompactLevelMap>("Level1"); 

我研究這個問題,但我只是不停地越來越困惑。順便說一句,如果有人能告訴我如何導出XML文件,我也將不勝感激。

預先感謝您。

回答

1

您需要將包含CompactLevelMap的程序集的引用添加到您的內容項目中,以便XmlImporter可以找到該類型。右鍵單擊內容項目,然後選擇「添加引用」,然後選擇「項目」選項卡。 (你把它放在一個單獨的程序集的原因是,這樣你就不會創建引用您的遊戲主循環依賴。)


要在這種格式導出XML,你需要使用IntermediateSerializer.Serialize。缺點是IntermediateSerializer不是XNA框架的一部分,而是XNA Game Studio的一部分 - 它不是可再發行的。所以你不能真正把它包含在遊戲中 - 但是如果你讓用戶也下載VC#Express和XNA GS,也​​許在編輯器中。

它還需要針對完整的.NET 4.0 Framework(而不是客戶端配置文件)。

有關於此主題在this answer更詳細。

+0

工作就像一個魅力。非常感謝! – Halleflux 2013-02-24 21:14:01

+0

好的,爲了在地圖編輯器中導出,我可以彈出一個複製窗口,然後他們可以將它複製到一個文件中並保存爲一個XML文件。 – Halleflux 2013-02-26 05:53:03

+0

@Halleflux你也可以打開一個文件流並將其傳遞給'XmlWriter.Create'? – 2013-02-26 06:22:33