Suchen von Asset-Dateien in Linux-Spielen

11

Was ist die übliche Methode zum Speichern von 3D-Modellen, Texturen, Sounds und Skripten (z. B. Lua-Dateien) während der Entwicklung und in einer Version? Ich entwickle mit meinen Freunden ein Spiel hauptsächlich in C ++; In der Prototyping-Phase hatten wir nur eine einzige Textur, die mit dem GIMP als C-Header gespeichert wurde, aber dieser Ansatz lässt sich natürlich nicht gut skalieren und verlängert die Kompilierungszeiten erheblich.

Unter Windows ist es üblich, sie einfach in das %PROGRAMFILES%Unterverzeichnis zu verschieben, in dem sich die ausführbare Datei des Spiels befindet, und sie möglicherweise in einer geeigneten Baumstruktur anzuordnen. Unter Linux scheint das Bild jedoch viel komplizierter zu sein. Die ausführbare Datei befindet sich normalerweise in /usr/bin, während Anwendungen ihre anderen Dateien darin speichern /usr/share, und ich denke, es wäre eine äußerst schlechte Praxis, nicht ausführbare Dateien einzulegen /usr/bin. Die Verzeichnisstruktur während der Entwicklung ist jedoch völlig anders.

Ich könnte zwei verschiedene mögliche Lösungen finden:

  • Lassen Sie die ausführbare Datei die Asset-Dateien relativ zu sich selbst finden und installieren Sie das Spiel auf /opt. Dann platzieren Sie Symlinks zu /usr/bin. Während der Entwicklung ist der relative Pfad der Assets zu den Binärdateien der gleiche wie während der Bereitstellung.
  • Greifen Sie auf die Dateien mit einem absoluten Pfad zu, der als Präprozessorsymbol definiert ist. Lassen Sie den Build-Prozess (in unserem Fall Raws Makefile) darauf achten, ihn so zu definieren, wie er passt.

Beide Ansätze erscheinen mir in der einen oder anderen Hinsicht etwas unelegant. Gibt es eine gängige Praxis in der Spieleentwicklungsbranche?

Die einzigen relevanten Fragen, die ich finden konnte, waren das Bestimmen des Speicherorts der installierten / auf dem Festplattenspiel befindlichen Assets und der Verzeichnispfade für Ressourcen und Assets. Diese Fragen betrafen jedoch nicht das Problem der Ausführung "aus dem Quellbaum".

Kristóf Marussy
quelle

Antworten:

6

../lib/programnameoder ../share/programname/relativ zum dirname(3)von argv[0], abhängig davon, ob die Assets architekturabhängig sind oder nicht.

Dies ist der gleiche Standard wie bei allen anderen Linux-Programmen (und den meisten Nicht-Mac-Unix-Programmen).

Wenn Sie vom "Quellbaum" aus ausführen möchten,

  1. Sie sollten ein echtes Build-System erhalten und einen Build ausführen, da Sie niemals "aus dem Quellbaum ausführen", sondern eine erstellte ausführbare Datei ausführen, die Ihr Build-System irgendwo ausspuckt, und die Assets genauso einfach kopieren oder verknüpfen kann.
  2. Wenn Ihr Build-System zu beschissen ist, überprüfen Sie einfach auch .oder ./assetsusw. und prüfen Sie später in der Entwicklung ein neues Build-System.

Im Gegensatz zu happy_emi sollten Sie auf jeden Fall eine Möglichkeit bereitstellen, dies mit Umgebungsvariablen zu überschreiben. Es ist genau das, wofür sie bestimmt sind.


quelle
Berücksichtigen Sie auch diese Umgebungsvariablen, die auf Linux-Desktops Standard
bogglez