Як ви запакуєте ресурси в грі, коли у вас їх занадто багато?


10

Нещодавно я створив базовий клон Space Invaders в C ++, використовуючи рамку Allegro 5. Після закінчення я зрозумів, що маю близько 10 спрайтів і DLL вартістю 13 Мб; деякі гравці навіть не мали DLL-файлів mingW, що робило гру дуже заплутаною.

Як я спакую всі свої ресурси таким чином, щоб я міг легко додавати та видаляти дані до своєї гри, а також зменшити розмір ресурсу, в основному розміщуючи їх на одному місці? Я використовую кодові блоки.


1
Як ви розумієте термін ресурси? Такі акти, як зображення, звуки, ... або ви включаєте DLL в цей термін?
Крістіан Івічевич

Я вважаю за краще, якщо б я міг відповідати DLL, тому що у мене їх дуже багато.
Багстер

Першою моєю ідеєю було б знайти підходящу бібліотеку, як-от (досить застаріла ...), zziplibщоб зберігати всі мої звичайні активи в zip-файлі, а потім завантажувати їх у мою гру через спеціальний контент-конвеєр для двигуна. Що ви в основному шукаєте на початку - це спосіб завантажити файли з zip-файлу в пам'ять, щоб мати можливість використовувати їх у своїй грі. Стосовно dll це досить складно, оскільки вони, як правило, повинні знаходитися в тому ж режимі, що і виконавчий файл, Windowsабо System32dir, що НЕ рекомендується! Як щодо архіву SFX, який потрібно витягнути TEMPзвідти і запустити?
Крістіан Івічевич

3
Ви питаєте про те, як використовувати інсталятор? Тому що DLL - це не ресурси.
Нікол Болас

Відповіді:


13

Схоже, що перед вами стоять два виклики: розподіл та упаковка активів.

Поширення

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

Як розмістити свої файли?

  • Ваші .dlls зазвичай мають бути в тій самій каталозі, що і виконуваний файл (є винятки, але заради простоти ...)
  • Ваші активи (зображення, аудіо) можуть знаходитись там, де ви хочете їх, хоча якщо ви перемістите їх посиланням на ваш виконуваний файл, вам доведеться змінити код завантаження ресурсів, щоб врахувати це.

Я зазвичай роблю щось подібне:

MyGame \ // Каталог верхнього рівня містить всю програму
  bin \ // dlls йдуть сюди разом із зібраним exe
  res \ // Каталог ресурсів ігор верхнього рівня
    музика \
    звукові ефекти\   
    голос \
  cfg \ // файли конфігурації за замовчуванням (користувацькі конфігурації переходять у каталог користувачів)
  MyGame.lnk // ярлик до складеного exe

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

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

Тоді, що відбувається, коли ви хочете виправити свої активи? Тоді вам доведеться або: скласти цілий новий файл активів і розподілити його своїм користувачам (таким чином вони по суті перезавантажують те, що вони вже є, плюс жменю доповнень), або вам потрібно створити оновлення (іншу програму для підтримки ) і вирішуйте, що все може піти не так, і ваш файл активів буде пошкоджений ...

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

Створення інсталятора

Це якщо припустити, що ви орієнтовані на Windows ... як тільки ви перейдете вище, ви можете працювати над створенням інсталятора для вашої гри. Я б за всяку ціну уникав методів ClickOnce, які підтримує Visual Studio. Це не ваш типовий інсталятор Windows, і він має власний набір химерностей.

Погляньте на це питання StackOverflow - він містить набір корисних посилань на пакети встановлення, які ви можете використовувати. Багатьом людям сьогодні подобається WiX . Я ніколи не використовував його сам. Крім того, AdvancedInstaller та InnoSetup - обидва популярні варіанти.


1
Дякую за цю відповідь, тепер у мене є основна ідея, як я повинен розповсюджувати свою гру.
Багстер

1
Не використовуйте WiX. Це зашкодить вам голову і вб'є вашу сім'ю.
Рей Дей

1
Є ще один варіант - може бути більше одного пакета активів. Щось на зразок "ресурси.pak, patch1.pak, patch1337.pak, .." тоді було б способом зберігати дані виправлення. Не потрібно було б змінювати оригінальний пакет, просто зробіть двигун здатним виявляти та замовляти патчі.
змія5

0

Можливо, ви зможете статично зв’язати деякі бібліотеки, а не включати DLL. Якщо і як відрізняється для кожної бібліотеки


-1

Ви можете використовувати таке програмне забезпечення, як Enigma, щоб упакувати файли та зберегти їх в єдиний .dat. Вам потрібно буде змінити папку запуску.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.