Trovare file di risorse nei giochi Linux


11

Qual è il solito metodo di memorizzazione di modelli 3D, trame, suoni e script (ad esempio file Lua) durante lo sviluppo e in una versione? Sto sviluppando un gioco con i miei amici principalmente in C ++; nella fase di prototipazione avevamo solo una trama che è stata salvata come intestazione C con GIMP, ma ovviamente questo approccio non si adatta bene e aumenta notevolmente i tempi di compilazione.

Sotto Windows, la solita pratica è semplicemente scaricarli nella %PROGRAMFILES%sottodirectory in cui risiede l'eseguibile del gioco, magari disponendoli in una struttura ad albero appropriata. Tuttavia, su Linux l'immagine sembra molto più complicata. L'eseguibile di solito risiede /usr/bin, mentre le applicazioni archiviano i loro altri file /usr/sharee penso che sarebbe una cattiva pratica inserire file non eseguibili /usr/bin. Tuttavia, la struttura delle directory durante lo sviluppo è totalmente diversa.

Potrei trovare due diverse soluzioni possibili:

  • Consenti all'eseguibile di trovare i file di risorse relativi a se stesso e di installare il gioco /opt. Quindi posizionare i collegamenti simbolici a /usr/bin. Durante lo sviluppo, il percorso relativo delle risorse verso i binari è lo stesso che durante la distribuzione.
  • Accedi ai file con un percorso assoluto definito come simbolo del preprocessore. Lascia che il processo di compilazione (nel nostro caso, raw Makefiles) si occupi di definirlo come è adatto.

Entrambi gli approcci mi sembrano in qualche modo ineleganti in un aspetto o nell'altro. Esiste una pratica comune nel settore dello sviluppo dei giochi al riguardo?

Le uniche domande rilevanti che ho potuto trovare sono state la determinazione della posizione delle risorse di gioco installate / su disco e dei percorsi della directory per risorse e risorse , ma quelle non hanno risolto il problema dell'esecuzione "dall'albero dei sorgenti".

Risposte:


6

../lib/programnameoppure ../share/programname/, rispetto al dirname(3)di argv[0], a seconda che le risorse siano o meno dipendenti dall'architettura.

Questo è lo stesso standard di tutti gli altri programmi Linux (e la maggior parte di Unix non Mac).

Se si desidera eseguire "dall'albero dei sorgenti",

  1. Dovresti ottenere un vero sistema di compilazione ed eseguire una compilazione, perché non "esegui mai dall'albero dei sorgenti", esegui un eseguibile compilato, che il tuo sistema di compilazione sputa da qualche parte e può copiare o collegare gli asset in posizione altrettanto facilmente.
  2. Se il tuo sistema di compilazione è troppo scadente, controlla anche .o ./assets, ecc., Quindi cerca un nuovo sistema di compilazione più avanti nello sviluppo.

A differenza di quanto dice happy_emi, dovresti sicuramente fornire un modo per sovrascriverlo con le variabili di ambiente. È esattamente quello a cui sono destinati.


Considera anche queste variabili di ambiente, che sono standard sui desktop Linux: standards.freedesktop.org/basedir-spec/basedir-spec-latest.html
bogglez
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.