2014-02-24 65 views
1

我正在製作遊戲的關卡編輯器,但我不想做「內容 - >添加並選擇圖像/精靈/紋理」,然後執行Texture2D texture1 = Content.Load<Texture2D>(@"path\name");,I想通過OpenFileDialog添加我的項目所需的每個紋理。在運行時將圖像加載到內容管道

我已經實施了OpenFileDialog,所以我在我有一個文件流與我的形象。現在,我如何在我的內容文件夾中加載紋理爲永久? (所以我會有.xnb文件?)

我讀取使用功能Texture2D.FromStream(GraphicsDevice, filestream);,但這不會在我的文件夾中創建.xnb文件;我只需要一些與通常加載紋理相同的東西,使用「content-> add」,ecc。

謝謝!

+0

您正在考慮將圖像編譯爲'xnb'格式並將它們自動包含到您的項目中。這些是我在本網站上看到的兩個獨立的問題。 – user1306322

回答

4

我建議您簡單地生成一個文件,該文件是加載遊戲的所有資源的記錄。我已經停止依靠XNA內容項目模板,因爲它要求您非常慎重地考慮添加的每個資源,這對於快速開發遊戲原型來說不太有利。

當您的編輯器啓動時,它會讀取文件(包含您將需要的每個資源的路徑),並在每次打開新紋理時(從對話框中)追加到此文件,然後加載該紋理。這樣,下次您的項目運行時,您的遊戲將自動加載已添加的每個資源。您如何管理過大的資源緩存,以及何時裝載和卸載取決於您,但我已經體驗過這種方式,這樣做更有效。

如果你關心包裝,你也可以設置一些簡單的壓縮來填充你的紋理和聲音。

//This will just load all textures from a folder, 
// and works well enough if you want to keep your game open/moddable. 
foreach (string str in Directory.GetFiles("resource\\texture\\","*.png", SearchOption.AllDirectories)) 
{ 
    int lastSlash = str.LastIndexOf('\\'); 
    string textureName = ((lastSlash > -1) ? str.Substring(lastSlash + 1) : str).Replace(".png",""); 
    Util.Log(LogManager.LogLevel.Debug, "Loading texture: " + str); 
    textures[textureName]= Texture2D.FromStream(context.GraphicsDevice, (Stream)File.OpenRead(str)); 
} 
+0

謝謝!這樣就不會創建一個.xnb文件? –

+0

正確。你並不需要一個。 – selkathguy