В настоящее время я работаю над RPG, используя в качестве основы стартовый набор RPG от XNA. (http://xbox.create.msdn.com/en-US/education/catalog/sample/roleplaying_game) Я работаю с небольшой командой (два дизайнера и один художник музыки / звука), но я единственный программист. В настоящее время мы работаем со следующей (неустойчивой) системой: команда создает новые картинки / звуки для добавления в игру, или они изменяют существующие звуки / картинки, затем они фиксируют свою работу в репозитории, где мы сохраняем текущую сборку. из всего. (Код, изображения, звук и т. Д.) Каждый день или около того я создаю новый установщик, отражающий новые образы, изменения кода и звука, и каждый устанавливает его.
Моя проблема заключается в следующем: я хочу создать систему, в которой остальная часть команды может заменить, например, звуки боя, и они могут сразу увидеть изменения, не дожидаясь, пока я построю их. Способ установки XNA, если я его опубликую, кодирует все графические и звуковые файлы, поэтому команда не может «горячей замены». Я могу настроить Microsoft VS на каждом компьютере и показать им, как быстро публиковать, но я хотел знать, есть ли более простой способ сделать это.
Кто-нибудь сталкивался с этим при работе с командами, использующими XNA?
Ответы:
Прежде всего, я не думаю, что вам нужно каждый раз публиковать и создавать установщик. Просто создайте проект и поместите выходные файлы (т. Е. EXE и папку Content плюс любые зависимости DLL, которые вы, возможно, используете) в репозиторий, и он также должен запускаться на их компьютере, если на них установлено перенаправление XNA.
Что касается вашего вопроса, я могу подумать о двух решениях, одно из которых включает в себя установку Visual Studio на свои машины, а другое - внесение некоторых изменений в игру:
Пусть они установят Visual Studio и научат их передавать свои ресурсы через конвейер содержимого XNA. Им просто нужно создать проект конвейера контента, перетащить туда файлы и собрать. Затем они могут поменять местами полученные файлы XNB с файлами в папке проекта и запустить EXE, чтобы увидеть изменения.
Если вы разрабатываете для Windows, вы можете изменить свой код так, чтобы он загружал ресурсы во время выполнения в их исходных форматах, без необходимости проходить через раздел содержимого. Для загрузки изображений, которые вы можете использовать
Texture2D.FromStream
(как в этом примере ) и для аудио, лучшее решение, которое я нашел, - это использовать API FMOD (как в этом примере ). Затем они могут просто поменяться активами напрямую и запустить игру.Чтобы пойти дальше, вы также можете попытаться сделать свою игру максимально управляемой данными. По сути, это означает, что все в игре, что вы сможете легко изменить, например, статистика классов персонажей или путь к используемым изображениям и звуковым файлам, должно быть изъято из кода и помещено во внешние текстовые файлы. (например, XML, JSON, INI). Затем вам нужно всего лишь отредактировать эти файлы в текстовом редакторе, чтобы увидеть изменения в игре, и нет необходимости перестраивать.
источник
Build->Configuration Manager
. По умолчанию в сборке отладки определенDEBUG
символ компиляции, что означает, что вы можете обернуть свой не выпускаемый код#if ( DEBUG ) doStuffIWouldntDoInRelease(); #elif theActualReleaseCode(); #endif
.svn update
это записывать в свой рабочий каталог, и они были в курсе.Немного опоздал на вечеринку, но вот моя идея.
Я бы пошел с 3-й возможностью, которая не предполагает ничего, как изменение уже существующей базы кода. Это будет работать, если вы зафиксируете (и скопируете) двоичные файлы (действительный .exe игры и связанные с ним .dll из компиляции) где-нибудь в выходном каталоге - например, с помощью сценария после сборки. Далее, я предполагаю, что мы говорим о Visual Studio 2010 и XNA Game Studio 4.0 (процедура очень похожа для других версий, просто нужно заменить некоторые цифры)
Итак, идея такова: создайте скрипт (.cmd) в корне вашего проекта, где находится решение .sln, со следующими шагами:
Вызвать «Командную строку Visual Studio 2010»:
Это сделано для того, чтобы наш скрипт мог найти библиотеки XNA и все необходимые инструменты и двоичные файлы.
Вызовите задачу MSBuild для проекта контента (.contentproj):
Вы можете изменить свойства указанными различными платформами / профилями. Вы можете даже пойти дальше, чтобы создавать контент для большего количества платформ одновременно (Windows Phone, Xbox 360 или Windows). Профиль может быть: Reach или HiDef (http://msdn.microsoft.com/en-us/library/ff604995.aspx)
Рекурсивно скопируйте вывод в папку, в которой хранятся бинарные файлы + реальная игра:
Более подробную информацию о флагах, вы можете вызвать в командной строке:
xcopy /?
. Важными из них являются:/d
копирование только измененных файлов - если у вас много ресурсов, полезно не копировать снова и снова уже существующие и неизмененные файлы;/y
для автоматической перезаписи существующих файлов, чтобы их можно было обновлять более новой версией. Я использовал,xcopy
потому что обычныйcopy
не может копировать рекурсивно папки, насколько я знаю, - и, вероятно, вы структурируете содержимое в папках и подпапках. Плюс, это лучше, чем обычноcopy
(много разных флагов).Вызовите,
pause
чтобы скрипт ждал ввода пользователя. Это полезно для проверки правильности сборки и отсутствия ошибок.Теперь артистам (или всем, кто) изменяет файлы содержимого, нужно просто дважды щелкнуть сценарий .cmd, и новый контент будет создан и скопирован в выходной каталог, в котором находятся зафиксированные артефакты, и готов к тестированию.
Однако есть небольшая проблема, для которой вам придется вернуться к 1-му пункту поста Дэвида: если художники хотят изменить проект контента, добавляя / удаляя / перемещая файлы, они должны сделать это, открыв проект в Visual Studio (или редактирование файла проекта вручную, что, я сомневаюсь, кто-нибудь сделает). Как я уже сказал, это небольшая проблема, потому что они могут просто зафиксировать новые файлы в репозитории, и вы, кодер, включите их в Content Project, когда код будет создан для их обработки.
В связи с этой идеей Шон Харгривиас опубликовал что-то о msbuild и создании проектов контента из командной строки: http://blogs.msdn.com/b/shawnhar/archive/2006/11/07/build-it-ahead-of-time .aspx Его решением было создание нового файла, но я думаю, что проще и удобнее обслуживать напрямую уже существующий файл проекта.
PS: простите за длинный пост xD
источник