Menemukan file aset di game Linux

11

Apa metode yang biasa digunakan untuk menyimpan model 3D, tekstur, suara dan skrip (misalnya file Lua) selama pengembangan dan dalam rilis? Saya mengembangkan game dengan teman-teman saya terutama di C ++; pada fase prototyping kami hanya memiliki satu tekstur yang disimpan sebagai header C dengan GIMP, tetapi tentu saja, pendekatan ini tidak skala dengan baik dan meningkatkan waktu kompilasi.

Di bawah Windows, praktik yang biasa dilakukan adalah membuangnya ke %PROGRAMFILES%subdirektori di mana game executable berada, mungkin mengaturnya dalam struktur pohon yang sesuai. Namun, di Linux gambarnya tampak jauh lebih rumit. Yang dapat dieksekusi biasanya berada di /usr/bin, sedangkan aplikasi menyimpan file mereka yang lain /usr/share, dan saya pikir itu akan menjadi praktik yang sangat buruk untuk memasukkan non-executable /usr/bin. Namun, struktur direktori selama pengembangan sama sekali berbeda.

Saya dapat menemukan dua solusi yang berbeda:

  • Biarkan yang dapat dieksekusi menemukan file aset relatif terhadap dirinya sendiri, dan instal game ke /opt. Kemudian tempat symlinks ke /usr/bin. Selama pengembangan, jalur relatif dari aset ke binari adalah sama dengan selama penyebaran.
  • Akses file dengan jalur absolut yang didefinisikan sebagai simbol preprosesor. Biarkan proses pembuatan (dalam kasus kami, mentah Makefile) berhati-hati mendefinisikannya sesuai.

Kedua pendekatan itu tampaknya agak tidak cocok bagi saya dalam satu aspek atau lainnya. Apakah ada praktik umum dalam industri pengembangan game tentang ini?

Satu-satunya pertanyaan yang relevan yang dapat saya temukan adalah Menentukan lokasi aset permainan disk yang diinstal / pada disk dan jalur Direktori untuk sumber daya dan aset , tetapi pertanyaan itu tidak membahas masalah menjalankan "dari pohon sumber".

Kristóf Marussy
sumber

Jawaban:

6

../lib/programnameatau ../share/programname/, relatif terhadap dirname(3)dari argv[0], tergantung pada apakah aset yang arsitektur-dependent atau tidak.

Ini adalah standar yang sama dengan semua program Linux lainnya (dan sebagian besar non-Mac Unix).

Jika Anda ingin lari dari "pohon sumber",

  1. Anda harus mendapatkan sistem build yang sebenarnya dan melakukan build, karena Anda tidak pernah "lari dari pohon sumber", Anda menjalankan executable yang dibangun, yang mana sistem pembangunan Anda letakkan di suatu tempat, dan itu dapat menyalin atau menautkan aset ke tempatnya dengan mudah.
  2. Jika sistem build Anda terlalu jelek, cukup periksa .atau ./assets, dll., Lalu lihat sistem build baru nanti dalam pengembangan.

Tidak seperti kata happy_emi, Anda harus menyediakan cara untuk menimpanya dengan variabel lingkungan. Persis seperti apa tujuan mereka.


sumber
Pertimbangkan juga variabel-variabel lingkungan ini, yang merupakan standar pada desktop Linux: standards.freedesktop.org/basedir-spec/basedir-spec-latest.html
bogglez