为什么我的SFML游戏只在终端上运行时才有效?

时间:2014-12-18 01:05:05

标签: c++ sfml

好的,这个问题需要更多解释。

我用SFML编写了一个用c ++编写的游戏。所以当我完成游戏时(我使用xcode),我去了Product>存档并将我的游戏可执行文件保存在文件夹中。我将所有资源放在与可执行文件相同的文件夹中。当我双击可执行文件时,我收到如下错误:

Last login: Wed Dec 17 19:38:15 on ttys001 My-Macbook:~ My_Name$ /Users/My_Name/Dropbox/SFML/DodgeBall/Builds/DodgeBall\ Build\ 12-17/DodgeBall ; exit; Failed to load font "sansation.ttf" (failed to create the font face) Game Crashed: class 'ResourceLoader' was unable to load file logout

这部分:

Game Crashed: class 'ResourceLoader' was unable to load file

从我的游戏本身输出。其余的我不明白。

但是当我进入终端并导航到我的游戏可执行文件时,我可以这样做:

./DodgeBall

我的游戏运行良好。怎么会这样?有没有办法让它可以双击可执行文件,它会运行吗?

我正在使用2010-ish macbook,xcode 6,OSX Mavericks和SFML 2.1。

1 个答案:

答案 0 :(得分:1)

双击可执行文件时,操作系统GUI将您的可执行文件作为新进程运行,并设置"当前目录"该进程到某个任意目录。在Windows中它是C:/Windows/System32/或其他东西。然后,您的代码告诉操作系统打开sansation.ttf,它会检查当前目录和其他几个目录,然后无法找到该文件并放弃。

当你"导航到我的游戏的可执行文件"在控制台中,以这种方式启动程序,控制台将您的应用程序作为一个新进程运行,并设置它的当前目录"与控制台的控制台相同,控制台是游戏可执行文件的目录。当您尝试打开ttf文件时,操作系统会检查当前目录,找到该文件,并继续愉快地继续。

最好的解决方案是添加一个改变过程的功能。当前目录到应用程序的任何位置。我不熟悉Mac OS,但我发现了这个:how to change the working directory to the location of the program。或者,您可以创建一个安装程序,创建某种存储tff文件位置的系统变量。 (在Windows中,这可能是设置PATH或进行注册表项目)