Как вы упаковываете ресурсы в игре, когда их слишком много?

10

Я недавно сделал базовый клон Space Invaders в C ++, используя платформу Allegro 5. После того, как я закончил, я понял, что у меня было около 10 спрайтов и 13 МБ DLL; у некоторых игроков даже не было mingW DLL, что делало игру очень запутанной.

Как мне упаковать все мои ресурсы таким образом, чтобы я мог легко добавлять и удалять данные в моей игре, а также уменьшать размер ресурсов, размещая их в одном месте? Я использую кодовые блоки.

Bugster
источник
1
Как вы понимаете термин ресурсы? Активы, такие как изображения, звуки, ... или вы включаете в этот термин библиотеки DLL?
Кристиан Ивичевич
Я бы предпочел, чтобы я мог соответствовать DLL, потому что у меня их много.
Bugster
Моей первой идеей было бы найти подходящую библиотеку, такую ​​как (довольно устаревшую ...), zziplibчтобы хранить все мои обычные ресурсы в zip-файле, а затем загрузить их в мою игру через специальный конвейер контента для движка. В начале вы в основном ищете способ загрузки файлов из zip-файла в память, чтобы иметь возможность использовать их в своей игре. Что касается библиотеки DLL это довольно сложно , потому что они , как правило , должны быть в той же директории, что и исполняемый файл или Windowsили System32реж который НЕ рекомендуется! Как насчет архива SFX, который нужно извлечь TEMPи запустить оттуда?
Кристиан Ивичевич
3
Вы спрашиваете о том, как использовать установщик? Потому что библиотеки не являются ресурсами.
Николь Болас

Ответы:

13

Кажется, что здесь есть две проблемы: распространение и упаковка активов.

распределение

Упакуйте все ваше приложение в каталоги по своему усмотрению, затем поместите каталог верхнего уровня в ZIP-файл. Распространите этот файл .zip. Когда ваши пользователи распакуют архив, у них будет папка со всем необходимым для запуска игры.

Как вы размещаете свои файлы?

  • Ваши .dll обычно должны находиться в том же каталоге, что и исполняемый файл (есть исключения, но для простоты ...)
  • Ваши ресурсы (изображения, аудио) могут быть там, где вы хотите, но если вы переместите их со ссылкой на свой исполняемый файл, вам придется изменить код загрузки ресурсов, чтобы учесть это.

Я обычно делаю что-то вроде этого:

MyGame \ // каталог верхнего уровня содержит всю программу
  bin \ // dll идут сюда вместе с скомпилированным exe
  res \ // каталог игровых ресурсов верхнего уровня
    Музыка\
    Звуковые эффекты\   
    голос \
  cfg \ // файлы конфигурации по умолчанию (пользовательские конфигурации идут в пользовательский каталог)
  MyGame.lnk // ярлык для скомпилированного exe

Упаковка активов

Вы можете использовать какую-то библиотеку сжатия (zlib, lzo), чтобы сжать все ваши игровые ресурсы (указанная выше директория res \) в один файл. Затем вам нужно использовать ту же библиотеку сжатия для извлечения содержимого ваших ресурсов в режиме реального времени, чтобы загрузить свои ресурсы в вашу игру.

Что происходит, когда вы хотите исправить свои активы? Затем вы должны либо: скомпилировать целый новый файл ресурсов и распространить его среди своих пользователей (чтобы они по сути заново загружали то, что у них уже есть, плюс несколько добавлений), либо вам нужно создать программу обновления (другую программу для поддержки). ) и иметь дело с тем, что что-то может пойти не так, и ваш файл активов будет поврежден ...

Честно говоря, это не совсем тривиально, и я не вижу отдачи в вашей ситуации. Простого каталога должно быть достаточно для инкапсуляции ваших 10 спрайтов, и гораздо проще добавлять и исправлять вещи: просто нужно загрузить их в правильный каталог и все готово.

Сборка установщика

Предполагается, что вы ориентируетесь на Windows ... после того, как вы выполнили вышеперечисленное, вы можете приступить к созданию установщика для вашей игры. Я бы во что бы то ни стало избегал методов ClickOnce, которые поддерживает Visual Studio. Это не ваш типичный установщик Windows и поставляется с собственным набором причуд.

Взгляните на этот вопрос StackOverflow - он содержит набор полезных ссылок на пакеты установщика, которые вы можете использовать. Многим людям сегодня нравится WiX . Я никогда не использовал это сам. Кроме того, AdvancedInstaller и InnoSetup являются популярными вариантами.

зашифровывать
источник
1
Спасибо за этот ответ, теперь у меня есть основная идея, как мне распространять свою игру.
Bugster
1
Не используйте WiX. Это повредит вашей голове и убьет вашу семью.
Рэй Дей
1
Есть еще один вариант - может быть более одного пакета активов. Тогда что-то вроде «resources.pak, patch1.pak, patch1337.pak, ..» будет способом хранения данных патча. Не нужно будет изменять исходный пакет, просто сделайте движок способным обнаруживать и заказывать пакеты исправлений.
snake5
0

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

Мэтью Р
источник
-1

Вы можете использовать программное обеспечение, такое как Enigma, чтобы упаковать ваши файлы и сохранить их в один .dat. Вам нужно будет изменить папку вашего лаунчера.

Dev
источник