在Linux游戏中查找资产文件


11

在开发和发行中存储3D模型,纹理,声音和脚本(例如Lua文件)的常用方法是什么?我正在和朋友一起主要使用C ++开发游戏;在原型设计阶段,我们只有一个纹理被GIMP保存为C头文件,但是,当然,这种方法的伸缩性不好,并且大大增加了编译时间。

在Windows下,通常的做法是将它们转储到%PROGRAMFILES%游戏可执行文件所在的子目录中,也许将它们安排在适当的树形结构中。但是,在Linux上,情况似乎要复杂得多。可执行文件通常驻留在中/usr/bin,而应用程序将其其他文件存储在中/usr/share,我认为将非可执行文件放入中是极差的做法/usr/bin。但是,开发过程中的目录结构完全不同。

我可以提出两种不同的可能解决方案:

  • 让可执行文件找到相对于自身的资产文件,然后将游戏安装到/opt。然后将符号链接放置到/usr/bin。在开发期间,资产到二进制文件的相对路径与部署期间相同。
  • 使用定义为预处理器符号的绝对路径访问文件。让构建过程(在我们的示例中为raw Makefile)负责适当定义它。

在一方面或另一方面,这两种方法对我来说似乎都很微不足道。在游戏开发行业中是否有与此相关的惯例?

我能找到的唯一相关问题是,确定磁盘游戏资产上已安装/在磁盘上的资产的位置以及资源和资产的目录路径,但是这些并没有解决“从源代码树”运行的问题。

Answers:


6

../lib/programname或者../share/programname/,相对于所述dirname(3)argv[0],这取决于如果资产是体系结构相关与否。

这与所有其他Linux(和大多数非Mac Unix)程序相同的标准。

如果要从“源代码树”运行,

  1. 您应该获得一个真正的构建系统并进行构建,因为您从不“从源代码树中运行”,而是运行一个构建的可执行文件,该可执行文件会被您的构建系统吐出某个地方,并且它可以轻松地将资产复制或链接到位。
  2. 如果您的构建系统太笨拙,只需检查../assets等等,然后在以后的开发中研究新的构建系统。

与happy_emi所说的不同,您绝对应该提供一种使用环境变量覆盖它的方法。这正是他们想要的。


还请考虑以下这些环境变量,这些变量是Linux桌面上的标准变量:standards.freedesktop.org/basedir-spec/basedir-spec-latest.html
bogglez,2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.