2010-07-28 63 views
2

我已經成功地使用Winform Series 1Winform Series 2成功構建了我的winform內容,但是我的問題是,下次打開它時,如何將內容加載回編輯器。內容.xnb文件當前正被保存到臨時文件夾中。無論如何要將內容重新加載到編輯器中,而不必再去創建每個文件?Winform XNA中的建築內容

我可以將它保存到bin /文件夾內的Content文件夾,然後在啓動時查看該文件夾並查找.xnb文件並加載它們?還是有更簡單的方法呢?

回答

1

在第二個WinForms示例中,有一個HTML自述文件,描述應用程序如何將構建內容保存到臨時目錄,然後在程序關閉時將其刪除。

這是最重要的一點:

根據您的應用程序,你可能更願意總是使用相同的臨時目錄的名稱,永不刪除。這會將文件留在硬盤上。內容構建過程是增量式的。如果您的程序嘗試加載之前運行過程中已經構建的相同內容文件,則不需要執行任何實際的處理工作。這可以加快程序的加載時間,例如可能希望每次啓動時加載相同文件的關卡編輯器。

它說刪除臨時目錄「由ContentBuilder.DeleteTempDirectory處理,這被稱爲Dispose」。因此,只需撥打DeleteTempDirectory即可將其刪除。

自述文件更詳細地描述瞭如何選擇臨時目錄(以及爲什麼)。您可以修改CreateTempDirectory以更好地適應您的應用程序。例如,如果您的編輯器具有「級別」文件,您可能希望將您的構建內容(.xnb文件)保存在級別旁邊的同名子目錄中,以便您的遊戲可以輕鬆打開構建的內容。


一旦你的文件被保存在會話之間 - 你所要做的就是重新加載它們。兩種明顯的方法是存儲打開的文件列表,並在下一個會話中重新加載它。或者乾脆開一切,這是你的輸出目錄:

下面是一些粗糙的代碼做後者(假設沒有子目錄):

string folder = @"C:\TemporaryXNAFilesOrWhatever"; 
List<Texture2D> textures = new List<Texture2D>(); 
ContentManager content = new ContentManager(serviceProvider, folder); 
string[] files = Directory.GetFiles(folder, "*.xnb"); 
foreach(string file in files) 
{ 
    string assetName = Path.GetFileNameWithoutExtension(file); 
    textures.Add(content.Load<Texture2D>(assetName)); 
} 
+0

謝謝你的發言。這確實有幫助,雖然它不能解決我的問題。我想知道是否可以將那些已經構建的文件加載回編輯器而無需指定,或者我可以只查看文件夾並以這種方式加載它們? – 2010-07-28 07:20:20

+0

@Chris:我已經更新了我的回答,描述瞭如何做到這一點。 – 2010-07-28 11:36:59