2016-07-07 113 views
1

我的SDL程序包含:过程在TTF_RenderText_Shaded行结束

TTF_Init(); 
TTF_Font *font = TTF_OpenFont("segoeui.ttf",13); 
SDL_Color textColor = {0,0,0}; 
SDL_Color backgroundColor = {34,177,76}; 
SDL_Surface *myText = TTF_RenderText_Shaded(font,"Some text",textColor,backgroundColor); 

当我运行从代码::块的编译和运行按钮的程序,没有任何问题,但是当我运行从程序在Windows资源管理器中的文件夹,窗口直接打开和关闭,并且在窗口关闭后,进程不再运行,文件stderr.txt和stdout.txt仍然存在。我做了一些测试,发现它的行SDL_Surface *myText = TTF_RenderText_Shaded(font,"Some text",textColor,backgroundColor);似乎结束了这个过程,就像在任务管理器中按下了End Process按钮一样。

它为什么这样做?我该如何解决它?

+2

尝试得到确切的指令把字体 –

+0

@ThomasAyoub感谢的绝对路径,那有效。问题在于字体的绝对路径取决于操作系统,我希望我的程序能够与任何操作系统兼容。在Windows中,它是'C:\ Windows \ Fonts \ segoeui.ttf',如果它在Linux或Mac中相同,它会让我感到惊讶。另一个问题是,也许用户在他的电脑上没有字体。我所做的解决这些问题的方法是将字体包含在项目中,并使用我发布的代码,但正如我在问题中所说的那样,这是行不通的。 –

+0

应该与相对路径一致。可能您目前的工作目录并非您的想法,请使用例如[GetCurrentDirectory](https://msdn.microsoft.com/en-us/library/windows/desktop/aa364934(v = vs.85).aspx)for windows或'getcwd' for * nix。 – keltar

回答

1

你应该设置你的字体绝对路径,而不是相对的。如果你打算做crossplateform部署时,您可能要包括这样的事情:

TTF_Font *font; 

#ifdef _WIN32 
    font = TTF_OpenFont("WinPath",13); // The windows path 
#elif linux 
    font = TTF_OpenFont("LinuxPaht",13); // The linux path 
#elif MacOS 
    font = TTF_OpenFont("Mac path",13); // The mac path 
#endif 

if(font == null) 
    // Throw an error, return or whatever. 

您可以在Detect Windows or Linux in C, C++