Пошук файлів активів в іграх Linux


11

Який звичайний метод зберігання 3D-моделей, текстур, звуків та сценаріїв (наприклад, файлів Lua) під час розробки та у випуску? Я розвиваю гру з друзями в основному на C ++; на етапі прототипування у нас була лише одна текстура, яка була збережена у вигляді заголовка C за допомогою GIMP, але, звичайно, такий підхід недостатньо масштабується та значно збільшує час компіляції.

У Windows звичайна практика полягає у тому, щоб просто скинути їх у %PROGRAMFILES%підкаталог, у якому знаходиться виконавчий файл гри, можливо, розташувавши їх у відповідній структурі дерева. Однак на Linux картинка здається набагато складнішою. Виконаний файл зазвичай знаходиться у ньому /usr/bin, тоді як програми зберігають інші файли /usr/share, і я вважаю, що ставити невиконані файли вкрай погано /usr/bin. Однак структура каталогів під час розробки абсолютно інша.

Я міг би запропонувати два різних можливих рішення:

  • Дозвольте виконуваному файлу знайти файли активів відносно себе та встановити гру /opt. Потім розмістіть посилання на /usr/bin. Під час розробки відносний шлях активів до бінарних файлів такий же, як і під час розгортання.
  • Доступ до файлів з абсолютним шляхом, який визначається як символ препроцесора. Нехай процес збирання (у нашому випадку сировини Makefile) береться за визначення його як підходить.

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

Єдині відповідні питання, які я міг знайти, - це визначення місця встановлених / на дискових ігрових активах та довідників доріжок для ресурсів та активів , але вони не вирішили проблему запуску "з дерева джерел".

Відповіді:


6

../lib/programnameабо ../share/programname/, залежно dirname(3)від argv[0], залежно від того, активи залежать від архітектури чи ні.

Це той самий стандарт, що і всі інші програми Linux (і більшість не-Mac Unix).

Якщо ви хочете запустити з "вихідного дерева",

  1. Вам слід отримати справжню систему збирання і зробити збірку, тому що ви ніколи не «бігаєте з вихідного дерева», ви запускаєте вбудований виконуваний файл, який ваша система збирання кудись виплюнув, і він може так само легко скопіювати або зв’язати активи на місце.
  2. Якщо ваша система збирання занадто хитра, просто також перевірте .або ./assetsтощо, а потім перегляньте нову систему збирання пізніше в розробці.

На відміну від happy_emi каже, ви, безумовно, повинні запропонувати спосіб переосмислити це змінними середовища. Це саме те, для чого вони призначені.


Також врахуйте ці змінні середовища, які є стандартними на робочих столах Linux: standard.freedesktop.org/basedir-spec/basedir-spec-latest.html
bogglez
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.