2013-07-04 110 views
1

返回NULL我試圖兩次加載字體到不同TTF_Fonts(不同尺寸),用下面的代碼:SDL TTF_OpenFont在第二次嘗試

char const* fontString; 
char const* titleFontString;  
//load the string values using libconfig  
try 
    { 
     fontString = cfg.lookup("font_string"); 
} 
catch(const SettingNotFoundException &nfex) 
{ 
} 
try 
{ 
    titleFontString = cfg.lookup("title_font_string"); 
} 
catch(const SettingNotFoundException &nfex) 
{} 
font = TTF_OpenFont(fontString, STREAMER_FONT_SIZE/SCREEN_DIMENSION_DIVIDER); 
pictureTitleFont = TTF_OpenFont(titleFontString, PICTURE_TITLE_FONT_SIZE/SCREEN_DIMENSION_DIVIDER);' 

第一個將加載,但第二返回null。我叫他們的訂單並不重要,總是第二次失敗。爲什麼是這樣?

回答

1

您應該測試TTF_OpenFont的返回值,如果發生故障,請使用TTF_GetError來了解錯誤的原因。我個人從來沒有遇到過問題,但如果字體不能支持字體大小,它可能會失敗?請參閱文檔獲取更多(非常少)的信息here

+0

無論如何,TTF_GetError消息是「無法打開cinu」。如果我交換字體加載順序,它總是第二次失敗,所以它不會成爲我加載它的方式的問題。另外,如果我使用字符串而不是字體路徑的變量,那麼它的工作原理。不幸的是我不能這樣做。有任何想法嗎? – user2550951

+0

在你的程序中似乎出現了一些真正的錯誤,需要更多的代碼來弄清楚發生了什麼。我不知道「cinu」來自哪裏,它應該顯示你的字體名稱。你的代碼是否與你在最初的問題中描述的完全相同? – emartel

+0

我修改了代碼以顯示更多細節。讓我困惑的是,當我將調用順序交換到TTF_OpenFont時,它仍然是第二次調用失敗,即使認爲這兩個調用應該是不相關的(用分開的變量提供調用並接收返回值)。 – user2550951

0

好的,謝謝你的幫助。

我無法找到爲什麼會發生這種情況,但似乎在調用TTF_OpenFont()時,的值都是字符串正在改變。 爲了解決這個問題,我在調用特定字體之前獲取每個字符串的值。不理想,但問題似乎現在已經消失。

如果時間允許,我會做進一步調查,看看我能不能解決爲什麼會發生這種情況。

再次感謝。

相關問題