2011-09-14 55 views
0

我想知道是否有一種簡單的方法來存儲紋理的路徑在字符串中。 我想知道這一點,因爲我使用保存系統的遊戲,我需要將紋理的路徑存儲在文件中以便稍後加載它。 我試過使用Texture2D.Name,但只是返回「」或null。 如果我無法得到完整的路徑,但至少我想擁有紋理的名稱。C#將紋理內容路徑保存爲字符串

編輯:我覺得我解釋這有點不好或者我不明白正確的答案,我給解釋一種新的嘗試。

我已經制作了一個腳本來保存「敵人」類的位置,HP等。然後這將被存儲在\ My Documents文件夾中的.txt文件中。一旦我想重新加載信息,我就創建了一個新的Enemy實例(Vector2,int)。然後我加載信息並使用int.Parse將我的字符串轉換爲int > new Enemy(new Vector2(int.Parse(string1), int.Parse(string2)), int.Parse(string3)) <

然後,我想要以某種方式保存紋理的名稱,以便稍後使用上述類似方法加載它。 (從.txt作爲字符串檢索)

+1

爲什麼不建立紋理管理器,並在管理器中加載紋理時存儲紋理路徑。 – Ben

+0

你是從磁盤動態加載紋理,還是它是你的內容項目的一部分? –

+0

它是內容的一部分 – PeppeJ

回答

1

一個Texture2D是嚴格的內存中對象,有一個Texture2D和文件之間沒有關係(不同之處在於一個Texture2D可以從被加載並保存到文件)。如果您想記住您從中加載的文件名,則應在加載紋理時保留文件名。

編輯在回答您的評論:

假設你不是在談論一個截圖,你需要做這樣的事情:

​​
+0

將它保存到一個文件是我想知道怎麼做 – PeppeJ

+0

@ user669415,我已經更新了我的答案 –

+0

這不是我所想的,但它可能會派上用場在附近未來。我想更多的是這樣的 StreamWriter.WriteLine(的Texture2D 「ThePathToTextureInContent」。) 然後大致裝載: 一個String = File.ReadAllLines(TheFileContainingTexturePath) 的Texture2D newTexture = Content.Load (S); – PeppeJ

1

大多數對象沒有可用的名字,即使他們可能沒有必要爲了安全起見用​​作文件名。

除非你有充分的理由期待好的名字對你反對和實際使用它,我建議乾脆Guid.NewGuid().toString()作爲文件名 - 安全的和獨特的。

0

ContentManagerRootDirectory屬性標識存儲內容管理器內容的文件夾。路徑與可執行文件夾相關,因此您可以使用該路徑以及您在加載內容時指定的名稱來構建內容的路徑。

例如,如果您加載一個。PNG質地像這樣:

Texture2D texture = Content.Load<Texture2D>("SomeTexture") 

隨後的路徑質地可以建立這樣的:

string path = Content.RootDirectory + Path.DirectorySeparator + "SomeTexture" + ".png" 

請注意,你需要的一些知識文件類型以便知道擴展名是什麼。這還假設您沒有更改內容項屬性中的名稱,因此您在Load調用中使用的密鑰與文件名相匹配,默認情況下它會執行此操作。

如果您存儲在子文件夾內容,那麼你只追加那些以及建立起來的完整路徑。

如果您需要完整的磁盤路徑,而不是相對一個,那麼你可以得到的可執行文件路徑和前置一個以Content.RootDirectory。谷歌在這方面是你的朋友。

0

如果您的遊戲是基於內容項目,最簡單的方法是使用路徑關係到內容項目路徑根目錄。

在你的內容項目:

the relative path to file is "Textures/Animated/Rambo" 

在你的腳本:

TextureAsset = "Textures/Animated/Rambo"; 

在您的發動機

Texture = Content.Load<Texture2D>("Textures/Animated/Rambo");  

//Or if you don't want to load through Content 

Texture = Texture2D.LoadFromFile(Path.Combine(Content.RootDirectory, "Textures/Animated/Rambo")); 

如果你想保存我建議你以同樣的方式進行,並強制保存在內容項目文件夾中。