Создание контента в Winform XNA - PullRequest
2 голосов
/ 28 июля 2010

Я успешно смог встроить контент в мою winform, используя Winform Series 1 и Winform Series 2 , но мой вопрос: как вы получаете контент для загрузки обратно в редактор в следующий раз, когда вы откроете его. Содержимое файла .xnb в настоящее время сохраняется во временной папке. Есть ли способ загрузить содержимое обратно в редактор без необходимости повторного создания и создания каждого файла?

Могу ли я просто сохранить его в папке Content в папке bin /, а затем просмотреть эту папку при запуске, найти файлы .xnb и просто загрузить их? или есть более простой способ?

1 Ответ

1 голос
/ 28 июля 2010

Во втором примере WinForms есть HTML-файл readme, который описывает, как приложение сохраняет встроенный контент во временный каталог, а затем удаляет его при закрытии программы.

Это важный бит:

В зависимости от вашего приложения вы можете предпочесть всегда использовать одно и то же имя временного каталога и никогда не удалять его. Это оставит файлы на вашем жестком диске. Процесс создания контента является пошаговым. Если ваша программа пытается загрузить те же файлы содержимого, которые уже были созданы во время предыдущего запуска, вам не нужно выполнять какую-либо реальную обработку. Это может ускорить загрузку таких программ, как редакторы уровней, которые, вероятно, захотят загружать одни и те же файлы при каждом запуске.

В нем говорится, что удаление временного каталога "обрабатывается ContentBuilder.DeleteTempDirectory, который вызывается Dispose". Так что просто найдите вызов DeleteTempDirectory и удалите его.

Файл readme описывает более подробно, как выбран временный каталог (и почему). Вы можете изменить 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));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...