好的,这个问题需要更多解释。
我用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。
答案 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
或进行注册表项目)