C # Сохранить путь к текстуре в виде строки - PullRequest
0 голосов
/ 14 сентября 2011

Мне интересно, есть ли простой способ сохранить путь текстуры в строке.Мне интересно это, потому что я использую систему сохранения для игры, где мне нужно сохранить путь текстуры в файле, чтобы позже загрузить его.Я пытался использовать Texture2D.Name, но это просто возвращает "" или ноль.Если я не могу получить полный путь, это нормально, но, по крайней мере, я хотел бы иметь имя текстуры.

РЕДАКТИРОВАТЬ: я думаю, что я объяснил это немного плохо, или яне понимаю ответы правильно, я дам объяснение новой попытки.

Я создал скрипт, который сохранит Позицию, HP и т. д. для класса «Враг».Затем он сохраняется в текстовом файле в папке \ My Documents.Как только я хочу загрузить информацию обратно, я создаю новый экземпляр врага (Vector2, int).Затем я загружаю информацию и использую int.Parse для преобразования моей строки в int > new Enemy(new Vector2(int.Parse(string1), int.Parse(string2)), int.Parse(string3)) <

. Затем мне нужно как-то сохранить имя текстуры, чтобы позже загрузить ее обратно с использованием аналогичного метода.упомянутое выше.(Получить его из .txt в виде строки)

Ответы [ 4 ]

1 голос
/ 14 сентября 2011

Texture2D является строго объектом в памяти, нет никакой связи между Texture2D и файлом (за исключением того, что Texture2D можно загружать и сохранять в файлы).Если вы хотите запомнить имя файла, из которого вы его загрузили, вы должны удерживать его при загрузке текстуры.

РЕДАКТИРОВАТЬ В ответ на ваш комментарий:

Если вы не говорите о скриншоте, вам нужно сделать что-то вроде этого:

FileStream fs = new FileStream("myFile.png", FileMode.OpenOrCreate);
myTexture.SaveAsPng(fs, myTexture.Width, myTexture.Height);
fs.Flush();
1 голос
/ 14 сентября 2011

Большинство объектов не имеют пригодных для использования имен, и даже если бы они были, может быть необязательно быть безопасным для использования в качестве имени файла.

Если у вас нет веских оснований ожидать хорошего имени на вашем объекте и использовать его, я бы рекомендовал просто Guid.NewGuid().toString() в качестве имени файла - безопасно и уникально.

0 голосов
/ 14 сентября 2011

Если ваша игра основана на контентном проекте, проще всего использовать пути, близкие к корню пути контентного проекта.

В вашем контент-проекте:

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")); 

Если вы хотите сохранить, я рекомендую вам поступить аналогичным образом и принудительно сохранить в папке проекта контента.

0 голосов
/ 14 сентября 2011

ContentManager имеет свойство RootDirectory, которое определяет папку, в которой хранится контент менеджера контента. Путь указывается относительно исполняемой папки, поэтому вы можете создать путь к содержимому, используя его вместе с именем, которое вы указываете при загрузке содержимого.

Например, если вы загружаете текстуру .PNG следующим образом:

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

Тогда путь к этой текстуре можно построить так:

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

Обратите внимание, что вам нужно знать тип файла, чтобы узнать, что это за расширение. Это также предполагает, что вы не изменили имя в свойствах элемента содержимого, поэтому ключ, который вы используете в вызове Load, соответствует имени файла, что он делает по умолчанию.

Если вы храните свой контент в подпапках, вы просто добавляете их, чтобы создать полный путь.

Если вам нужен полный путь к диску, а не относительный, вы можете получить путь к исполняемому файлу и добавить его к Content.RootDirectory. Google - ваш друг в этом отношении.

...