2013-02-08 55 views
0

首先,我想指出,這不是一個Content.RootDirectory =「內容」;問題。我已經試過這個,沒有這行代碼。我有一個名爲FileFactory的類,它有三個字典。一個用於紋理,一個用於聲音,另一個用於精靈字體。我也有其他的工廠爲其他類型的對象加載XML文件,這些工作完美。下面是加載字體代碼:XNA ContentLoadException當文件是明顯存在

 public static void LoadFonts(ContentManager content) 
    { 
     string[] filePaths = Directory.GetFiles(@"Content\fonts\"); 
     string key; 

     foreach (string s in filePaths) 
     { 
      key = Path.GetFileNameWithoutExtension(s); 
      Fonts.Add(key, content.Load<SpriteFont>(s)); 
     } 
    } 

它給人的錯誤是:「錯誤加載‘內容\ Fonts \中ammoFont.xnb’找不到文件。」即使該文件是CLEARLY,也要考慮將其作爲字符串添加到filePaths數組中的目錄。我甚至檢查過這個文件夾,它就在那裏。以下是完整的錯誤:

Microsoft.Xna.Framework.Content.ContentLoadException was unhandled
Message=Error loading "Content\fonts\ammoFont.xnb". File not found.
Source=Microsoft.Xna.Framework StackTrace: at Microsoft.Xna.Framework.Content.ContentManager.OpenStream(String assetName) at Microsoft.Xna.Framework.Content.ContentManager.ReadAsset[T](String assetName, Action`1 recordDisposableObject) at Microsoft.Xna.Framework.Content.ContentManager.Load[T](String assetName) at OfUnknownOrigin.FileFactory.LoadFonts(ContentManager content) in C:\Users\Chris\Documents\Visual Studio 2010\Projects\WindowsGame1\WindowsGame1\WindowsGame1\FileFactory.cs:line 38 at WindowsGame1.UnknownOrigin.LoadContent() in C:\Users\Chris\Documents\Visual Studio 2010\Projects\WindowsGame1\WindowsGame1\WindowsGame1\Game.cs:line 110 at Microsoft.Xna.Framework.Game.Initialize() at WindowsGame1.UnknownOrigin.Initialize() in C:\Users\Chris\Documents\Visual Studio 2010\Projects\WindowsGame1\WindowsGame1\WindowsGame1\Game.cs:line 102 at Microsoft.Xna.Framework.Game.RunGame(Boolean useBlockingRun) at Microsoft.Xna.Framework.Game.Run() at WindowsGame1.Program.Main(String[] args) in C:\Users\Chris\Documents\Visual Studio 2010\Projects\WindowsGame1\WindowsGame1\WindowsGame1\Program.cs:line 15 InnerException: System.IO.FileNotFoundException Message=Error loading "Content\Content\fonts\ammoFont.xnb.xnb". File not found. Source=Microsoft.Xna.Framework StackTrace: at Microsoft.Xna.Framework.TitleContainer.OpenStream(String name) at Microsoft.Xna.Framework.Content.ContentManager.OpenStream(String assetName) InnerException:

答: 更改此代碼:

Fonts.Add(key, content.Load<SpriteFont>(s)); 

這樣:

Fonts.Add(key, content.Load<SpriteFont>("fonts\\" + key)); 
+0

作爲測試,確實'Content.Load ( 「字體/ ammoFont」);'自身工作中的'LoadFonts()'方法之外? – 2013-02-09 16:26:34

+0

是的,這確實有效。這就是我在創建FileFactory類之前所做的。 – Bagofsheep 2013-02-09 19:13:33

回答

0

從異常消息,它看起來像你用錯了調用它的字符串。內容是在那裏兩次,並且該擴展是有兩次:

Error loading "Content\Content\fonts\ammoFont.xnb.xnb" 

你沒有張貼在那裏你初始化數組的代碼,但如果你在定義有他們,刪除它們。

+0

這裏是詞典的字體被初始化: '公共靜態字典 Fonts = new Dictionary ();' 我無法弄清楚爲什麼Content和擴展會出現兩次。 – Bagofsheep 2013-02-09 05:33:16

+0

嘗試'Fonts.Add(鍵,content.Load ( 「字體\\」 +鍵));' – 2013-02-09 07:13:56

+0

好吧,這似乎已經奏效。我不確定爲什麼。謝謝! – Bagofsheep 2013-02-09 19:17:12

0

遊戲內容路徑必須是相對於你Content.RootFolder(「內容\ 「,並且不得包含文件擴展名(因此即使擴展名不同,也要避免重複的文件名)。

+0

路徑與此相關。我已經試過這個,沒有設置Content.RootFolder,發生同樣的事情。儘管Directory.GetFiles的路徑與Content.RootFolder不相關。我已經擺弄了代碼和字符串佈局無濟於事。 – Bagofsheep 2013-02-09 02:00:27

+0

您在路徑中包含文件擴展名,您必須刪除這些擴展名。 – user1306322 2013-02-09 03:21:17

+0

看看上面的代碼。我沒有在路徑中添加任何文件擴展名。 – Bagofsheep 2013-02-09 19:14:00